C ++在析构函数中使用null对nullptr是否正确?

时间:2016-09-12 20:51:53

标签: c++ class c++11 delete-operator

在类似的类中使用nullptr上的删除是正确的,还是应该避免像这样的解决方案?

class Ar{
    public:
    Ar();
    Ar(int n);
    ~Ar();
    void setT(int n);
    void remT(int n);
    int* ptr;
};
Ar::Ar() : ptr(nullptr) {};
Ar::Ar(int n) : Ar(){
    ptr = new int[n];
}
Ar::~Ar(){
    delete[] ptr;
}
void Ar::setT( int n ){
    delete[] ptr;
    ptr = new int[n];
}
void Ar::remT( int n ){
    delete[] ptr;
    ptr =  nullptr; // #1
}
int main(){
    Ar temp;
    temp.setT( 5 );
    temp.remT( 5 );
    return 0;
} // #2

在#2 destructor上会尝试delete[] ptr,其中ptr==nullptr也不会做任何事情。但是如果指令#1不存在,程序将在#2上崩溃,双重释放或损坏错误。

0 个答案:

没有答案