【发布时间】:2009-10-06 10:19:41
【问题描述】:
假设我有这个代码...
class GraphFactory : public QObject
{
private:
QMap<QString, IGraphCreator*> factory_;
public:
virtual ~GraphFactory();
};
GraphFactory::~GraphFactory()
{
// Free up the graph creators
QMap<QString, IGraphCreator*>::iterator itr;
for (itr = factory_.begin(); itr != factory_.end(); itr++)
{
IGraphCreator * creator = itr.value();
delete creator;
creator = NULL;
}
}
QMap factory_什么时候销毁?在调用析构函数之前,还是在析构函数期间? (我知道当 GraphFactory 的实例超出范围时将调用析构函数。但是非指针成员何时被销毁?)
编辑:当 factory_ 映射到达析构函数时,我得到了无效值。断点表明该值不会篡改存储在 QMap 中的值。
【问题讨论】:
-
你应该总是预先增加迭代器:++itr。对于整数和更简单类型的迭代器(如 vector)并不重要,但由于 ++ 工作方式的不同,它可能会降低复杂迭代器的性能。
标签: c++ destructor