假設我有這樣的代碼......C++ - 什麼時候非指針類成員被銷燬?
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廠_破壞?在調用析構函數之前,還是在析構函數之前? (我明白當GraphFactory的一個實例超出範圍時會調用析構函數,但何時非指針成員被破壞?)
編輯:當工廠映射達到時,我得到無效值析構函數。斷點表明該值不會篡改QMap中存儲的值。
你應該總是預先增加迭代器:++ itr。對於整數和更簡單的迭代器來說,無關緊要,就像vector <>一樣,但由於++的工作方式不同,它可能成爲複雜迭代器的性能瓶頸。 – 2009-10-06 10:23:36