在析构函数中多次删除

Multiple delete in destructor

如果我有两个动态数组作为私有数据成员:

std::string* first_array;
std::string* second_array;

我知道我可以在析构函数中像这样简单地删除

myClass::~myClass()
{
   delete[] first_array;
   delete[] second_array;
}

我担心的是,并非所有时间我都在两个数组中都有数据,所以这样的事情被认为是最佳实践吗?

myClass::~myClass()
{
   if(first_array)
       delete[] first_array;
   if(second_array)
       delete[] second_array;
}

我都试过了,都有效,不确定哪个在性能方面更好。

C++ 标准指定对空指针值调用 delete 将导致 NOP(无操作)。它完全有效,可以接受,并且通常是首选。

删除一个可能为NULL的指针是完全可以的。正如其他人已经指出的那样,在 NULL 指针上调用 delete 会导致 NOP。

但是,删除任何指针后,无论在哪里、为什么、如何、何时,都应该立即将指针赋值给NULL。如果不这样做,可能会导致意外双删除指针,这对您的程序来说是灾难性的坏事 (https://isocpp.org/wiki/faq/freestore-mgmt#double-delete-disaster)。

出于同样的原因,你不会初始化一个指向某个随机地址的指针,你不想在删除它之后让你的指针悬在风中,​​等待成为你脚下的子弹。