如果我有两个动态数组作为私有数据成员:
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;
}
我尝试了两种方法,但两者都有效,不确定哪种方式在性能方面更好。
答案 0 :(得分:6)
C ++标准指定在空指针值上调用delete
将导致NOP(无操作)。它完全有效,可接受,并且通常是首选。
答案 1 :(得分:0)
删除可能为NULL的指针是完全可以的。正如其他人所说,在NULL指针上调用delete会产生NOP。
然而,删除任何指针后,无论在何处,为何,如何或何时,都应该立即将指针指定为NULL。如果不这样做会导致指针意外双重删除,这对您的程序来说是灾难性的错误(https://isocpp.org/wiki/faq/freestore-mgmt#double-delete-disaster)。
出于同样的原因,你不会初始化一个指向某个随机地址的指针,你不想让你的指针在删除后悬挂在风中,只是等待你的脚下的子弹。