删除容器的正确方法
Right way to delete container
当用类中的容器破坏类时,例如:
class randomClass
{
...
private:
queue<myClass*> *myQueue;
...
};
删除队列的正确原因是什么:
第一种选择:
randomClass::~randomClass()
{
delete myQueue;
}
第二种选择:
randomClass::~randomClass()
{
while(myQueue.size() > 0)
{
myClass *tmp;
tmp = myQueue->front();
delete tmp;
myQueue->pop();
}
delete myQueue;
}
由于您使用的是常规指针(而不是智能指针),所以第二个选项是要使用的,因为它可以防止内存泄漏。
一种更为C++的编码方式是使用智能指针(即std::unique_ptr
或std::shared_ptr
)而不是普通指针。然后第一个选项将正确工作。
最后,您可能希望使myQueue
成为一个对象,而不是一个指针。这将使您无需编写析构函数以及复制构造函数和赋值运算符。
相关文章:
- 检测win32服务创建和删除的最佳方法
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 一种从内存中删除 UTF 字节的方法?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 在析构函数中删除单链表的正确方法是什么?
- 处理从列表中删除指向对象的指针的"healthy"方法是什么?
- 删除类成员的动态分配内存的最佳方法是什么
- 从浮点数中删除小数部分但保留类型的有效方法
- 如果方法在类中定义,则阻止编译器删除方法
- 删除复制构造函数的 Intel 13.1.2 中不良C++行为的解决方法
- 有没有一种预处理器的方法可以从调试符号中删除代码段
- 删除父/子窗口层次结构的最佳方法
- 工厂方法创建的对象应该在哪里删除?
- 如何通过最快的方法删除指定的标签组件
- 无法使用擦除方法删除矢量的最后一个元素
- 尝试使用窗口注册表中的路径和 DeleteFile() 方法删除.exe文件
- 通过此方法删除链表中的数据会发生什么情况
- 如何使用c++使用流的方法删除文件
- 如何通过析构函数方法删除对象(类)
- 标准的c++11方法删除一个类型的所有指针