我见过资源显示了两种分配内存的方法,同时确保有足够的内存来完成操作。
1)将'new'操作包装在try / catch中,因为它将返回std :: bad_alloc(?)
try { ptr = new unsigned char[num_bytes]; } catch(...) {}
2)在'new'操作后检查指定的指针是否为空。
ptr = new unsigned char[num_bytes]; if(ptr == NULL) { ... }
哪一个是对的?他们都工作吗?我是否需要同时做1和2?
谢谢,
JBU
答案 0 :(得分:17)
如果您使用引发异常的new
的标准实现,那么第一个是正确的。
如果您使用nothrow
作为:
ptr = new (nothrow) unsigned char[num_bytes];
if(ptr == NULL) { ... }
答案 1 :(得分:6)
一个不成功的分配[使用new
]抛出std::bad_aloc
,所以第一个是正确的。
第二个用于c代码,当使用malloc
[由于C中没有异常时,NULL用于指示分配失败]。
使用new
时,if语句永远不会产生true,因为如果分配失败 - 将抛出异常,并且不会到达if语句。当然,当分配成功时,if语句将产生错误。
答案 2 :(得分:0)
try { ptr = new unsigned car[num_bytes]; }
catch(std::bad_alloc& e) { cerr << "error: " << e.what() << endl; }
第二个习语更适合malloc