我想为'强异常安全'2d字符数组创建一个类,如果动态分配的指针设置为null(下面的代码片段中的情况1),或者它们只是表现得像未初始化的那样,我就会产生问题?我需要知道在异常的情况下安全地删除内存(我是否必须跟踪已分配的对象,或者只是扫描所有linesArg并调用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;
}
}
答案 0 :(得分:1)
new
运算符分配内存并返回已分配的内存的地址,因此这是一个非空值。
在正常情况下,您可以安全地在delete
分配的指针上使用new
运算符。此外,如果由于某种原因将指针设置为零,您仍然可以安全地使用delete
,而无需在调用delete
时检查指针是否为零值。
我希望这能回答你的问题。