在类中使用容器破坏类时,例如:
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;
}
答案 0 :(得分:2)
由于你使用常规指针(而不是智能指针),第二个选项是要使用的选项,因为它可以防止内存泄漏。
更多C ++编码方式是使用智能指针(即std::unique_ptr
或std::shared_ptr
)而不是普通指针。然后第一个选项将正常工作。
最后,您可能希望将myQueue
设为对象,而不是指针。这将使您无需编写析构函数,以及复制构造函数和赋值运算符。