动态指针是否设置为null

时间:2016-03-21 20:39:22

标签: c++ arrays

我想为'强异常安全'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;
    }
}

1 个答案:

答案 0 :(得分:1)

new运算符分配内存并返回已分配的内存的地址,因此这是一个非空值。

在正常情况下,您可以安全地在delete分配的指针上使用new运算符。此外,如果由于某种原因将指针设置为零,您仍然可以安全地使用delete,而无需在调用delete时检查指针是否为零值。

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