析构函数中的多个删除

时间:2015-07-07 00:13:46

标签: c++ arrays 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;
}

我尝试了两种方法,但两者都有效,不确定哪种方式在性能方面更好。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

删除可能为NULL的指针是完全可以的。正如其他人所说,在NULL指针上调用delete会产生NOP。

然而,删除任何指针后,无论在何处,为何,如何或何时,都应该立即将指针指定为NULL。如果不这样做会导致指针意外双重删除,这对您的程序来说是灾难性的错误(https://isocpp.org/wiki/faq/freestore-mgmt#double-delete-disaster)。

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