atype *pt=new atype(参数列表) 后,我怎么确定是否真的内存分配成功了?
如果用assert(pt!=NULL),那如果客户在用时恰好内存分配有问题就assert失败退出了怎么办?
我是这样用的
atype *pt=new atype(参数列表) ;
if(pt!=NULL) //先判断一下
{...
//正常执行
...
}
else
{
//可是这里else该怎样呢?仅仅是给出确切的出错提示吗?那在客户哪里不是程序停了吗?
}
大家有好的解决方案吗,后生诚心请教。
另:BOOL和bool的区别,程序开始时const int n=3; 和const n=3;的区别;
NULL就是0吗?
非常感谢!!
问题点数:40、回复次数:10Top
1 楼xiezhsh(雪中行)回复于 2001-08-23 19:28:17 得分 10
1. bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言,以下是BOOL在windef.h中的定义:typedef int BOOL;
2. NULL 就是0
看windef.h中NULL的定义:
#ifndef NULL
#ifdef __cplusplus//这个是指示是用C++来编译程序
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
Top
2 楼magicblue(小飞侠)回复于 2001-08-23 19:43:49 得分 7
不同的操作系统会使NULL取不同的值。NULL为空,不一定是0。在PC的BC与VC中NULL都取0,但考虑到移植,NULL不应认为是0Top
3 楼Great_Bug()回复于 2001-08-23 20:16:16 得分 7
这涉及软件的最低资源需求的问题。。。。用户的硬件如果不能提供足够资源,不是你的错。。。
但你的程序不应当有超出常规的资源需求,这个问题就随你的任务而异,你的程序结构什么的也有影响。。。。Top
4 楼gigix(透明)回复于 2001-08-23 20:24:04 得分 8
看看Effective C++的ITEM 7,那里有详解。
new分配失败的时候应该抛出一个异常,却不一定把指针置为NULL。Top
5 楼archy(archy)回复于 2001-08-23 20:45:40 得分 0
我是说假如我new了一个对象,这时客户的内存正好不够了(总数够,但都是碎片,于是退出)。会有这种情况吗?Top
6 楼archy(archy)回复于 2001-08-24 00:31:20 得分 0
急呀Top
7 楼vcsongs(vcsongs)回复于 2001-08-24 00:38:49 得分 7
一般如果不是写重要的长时间运行的服务器软件, 不必太注重这方面的内容的. 因为现在机器小内存/硬盘的很少了...
如果非常要处理这个. 可以在程序初始化的时候分配大块内存. 自己管理之...
内存访问尽量不要多次小量分配. 容易形成碎片...
Top
8 楼fz_zhou(vcfan)回复于 2001-08-24 00:42:05 得分 1
有返回值的!Top
9 楼xiezhsh(雪中行)回复于 2001-08-24 18:55:03 得分 0
给俺加分!!!呵呵..........Top
10 楼archy(archy)回复于 2001-08-25 12:20:46 得分 0
还有更好的回答吗,我还是怕客户使用时出问题,不是因为内存不够Top




