在类似的类中使用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上崩溃,双重释放或损坏错误。