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

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为对象,而不是指针。这将使您无需编写析构函数以及复制构造函数和赋值运算符。

10-08 12:32