删除容器的正确方法

Right way to delete container

本文关键字:方法 删除      更新时间:2023-10-16

当用类中的容器破坏类时,例如:

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_ptrstd::shared_ptr)而不是普通指针。然后第一个选项将正确工作。

最后,您可能希望使myQueue成为一个对象,而不是一个指针。这将使您无需编写析构函数以及复制构造函数和赋值运算符。