析构函数中的多次删除
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 (No-Operation)。这是完全有效的,可接受的,并且通常是首选的。
删除一个可能为NULL的指针是完全可以的。如前所述,在NULL指针上调用delete会导致NOP。
然而,在删除任何指针之后,无论在哪里,为什么,如何或何时,都应该立即将指针赋值为NULL。如果不这样做,可能会导致指针的意外双删除,这对您的程序来说是灾难性的坏(https://isocpp.org/wiki/faq/freestore-mgmt#double-delete-disaster)。
与不初始化指向某个随机地址的指针的原因相同,您不希望在删除指针后将其悬空,只是等待成为您脚上的子弹。
相关文章:
- MSVC 编译器/链接器何时合成标量/矢量删除析构函数
- 如果引用应该保留,不删除析构函数中的指针会导致内存泄漏吗?
- 删除析构函数C++中的指针
- bad_alloc::'标量删除析构函数'(无符号整数)当我尝试创建矢量 470MB 大小时
- 这是删除析构函数中的数组的正确方法吗?
- 尽管使用了 boost::scoped_ptr,我们是否应该删除析构函数中成员的指针
- 调用remove()删除析构函数中的文件是否安全
- 当存储在std::vector属性中时,我可以删除析构函数中的指针吗
- 删除析构函数中的(这个)指针
- C++ 删除析构函数中的向量类成员内存
- 删除析构函数中的指针和映射
- 尝试删除析构函数中已删除的指针
- 为什么允许我声明一个带有已删除析构函数的对象
- 为什么在删除析构函数时调用析构函数,如果未删除则不调用析构函数?
- 删除析构函数的意义何在
- std::istream子类:删除析构函数中的streambuf
- 如何安全地删除析构函数中的线程指针
- 标量删除析构函数问题
- C++11:我可以创建一个类型具有已删除析构函数的字段吗
- 为什么在 VC 中,'delete' 和 'delete []' 都使用标量删除析构函数?