- class test
- {
- private:
- CMsvEntry *iEntry;
- CMsvSession* iSession;
- S3DummyObserver* iObserver;
- public:
- test()
- {
- iObserver = new S3DummyObserver;
- iSession = CMsvSession::OpenSyncL(*iObserver);
- iEntry = CMsvEntry::NewL(*iSession, KMsvRootIndexEntryId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue));
- }
- ~test()
- {
- delete iSession;
- delete iEntry; // 异常
- delete iObserver;
- }
- };
开始以为是没有用symbian的CleanupStack的原因,但假设了很多种情况,都不对。刚才灵感一来,想会不会是delete顺序的原因,于是将析构的代码改成下面这样,问题就解决了。
- ~test()
- {
- delete iEntry; // 正常
- delete iSession;
- delete iObserver;
- }
现在发现是这种小问题导致我迷惑了一个星期,真冤!!!
在这里总结一些析构或删除对象时应注意的问题:
- 注意删除顺序,最好以栈方式申请和删除。
- 如果删除出错,则考虑对象的析构函数是不是private型的。
- 如果是用CleanupStack,则应参考 Inside CBase class - six essential questions
2699



被折叠的 条评论
为什么被折叠?



