是否将动态指针设置为null
Are dynamic pointers set to null
我想为"强异常安全"2d字符数组创建一个类,但我遇到了一个问题,即动态分配的指针是否设置为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值。
在正常情况下,您可以在new
分配的指针上安全地使用delete
运算符。此外,如果出于任何原因将指针设置为零,您仍然可以安全地使用delete
,而无需在调用delete
时检查指针是否为零值。
我希望这能回答你的问题。
相关文章:
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- C++ 由于类析构函数中的指针设置为 NULL 而导致的内存泄漏
- 删除对象与将指针设置为 null
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- STD :: Sort将数组指针设置为NULL
- 设置 NULL 会导致滞后,[MAX_STRING_LENGTH] = {'\0'};
- 一旦对象设置为 null,用于声明对象的堆大小的变量就设置为 null?
- 将结构元素地址设置为C 中的null(单链接列表)
- 移动语义是否只是一个浅层副本并将其他人的指针设置为 null?
- 删除指针并将指针设置为null之间有什么区别
- 为什么我们需要在move构造函数中将右值引用设置为null
- 将数组中的元素设置为 0 或 NULL
- SQLBindParam:设置 Null 值失败 (ODBC)
- 如果指针设置为 NULL,则对它的任何引用都不会或通过它也是 NULL
- WCHAR_T设置为c 中的null
- 当我要删除它时,指针甚至无法设置为null
- 将对象的数组设置为c 中的null
- 在此初始值设定项方法上将整个数组设置为 NULL 是否C++标准?
- C++如果没有任何像 C# 那样传递的内容,请将函数参数设置为 null