在对新的条件调用时调用delete

Dav*_*d S 1 c++ delete-operator

假设我有以下课程:

foo{
    ~foo();

    private:
        char *bar;
};
Run Code Online (Sandbox Code Playgroud)

在某些条件下,bar会创建一个新的char数组,那么处理删除它的正确方法是什么?一个简单的布尔会做或者会被认为是不好的做法吗?

per*_*eal 7

如果bar是nullptr,那么你可以安全地调用delete:

bar = nullptr;
delete bar;
Run Code Online (Sandbox Code Playgroud)

所以你不需要测试,只需删除.

3.7.4.2/3:

提供给解除分配函数的第一个参数的值可以是空指针值; 如果是这样,并且如果解除分配功能是标准库中提供的功能,则该调用无效.