我想为“强异常安全”的2d char数组创建一个类,并且我想知道是否将动态分配的指针设置为null(以下代码段中的情况1)或它们的行为就像未初始化的一样?我需要知道在发生异常的情况下安全删除内存(我是否必须跟踪分配的对象,还是只是扫描所有的行Arg并调用delete,因为我假设对null的删除没有任何作用),
这是我的代码:
CurrentWindowBufferBase::CurrentWindowBufferBase(const size_t linesArg, const size_t rowsArg): lines(linesArg), rows(rowsArg){
size_t allocatedRows = 0;
try{
1) buffer = new char*[linesArg];
while(linesArg)
buffer[--linesArg] = new char[rows];
}catch(std::bad_alloc& ex){
while(++linesArg < lines)
delete buffer[linesArg];
delete []buffer;
throw;
}
}
最佳答案
new
运算符分配内存,并返回分配的内存地址,因此它是非null值。
通常情况下,您可以在delete
分配的指针上安全地使用new
运算符。另外,如果出于任何原因将指针设置为零,您仍然可以安全地使用delete
,而不必在调用delete
时检查指针是否为零。
我希望这回答了你的问题。
关于c++ - 动态指针是否设置为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36141137/