是否将动态指针设置为null

Are dynamic pointers set to null

本文关键字:null 设置 指针 动态 是否      更新时间:2023-10-16

我想为"强异常安全"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时检查指针是否为零值。

我希望这能回答你的问题。