C++中結構體對象的delete順序問題


1. C++delete順序

在一個類中定義了一個結構體,並且聲明了這個結構體的一個對象,在這個結構體定義中又聲明了另外兩個類的對象。並且在該類(GMS)的構造函數中分別new,如下所示:

struct GMS::MDL
{
    MM* m_pMM;
    TaskPlan* m_pTaskPlan;
};
    pimpl_ = new MDL;
    pimpl_->m_pMM = new MM(this);
    pimpl_->m_pTaskPlan = new TaskPlan(this);

在GMS類的析構函數中delete時,需要先delete結構體pimpl_中的兩個類的對象,然后才可以delete結構體pimpl_。

    delete pimpl_->m_pMM;
    delete pimpl_->m_pTaskPlan;
    delete pimpl_;

若先delete結構體pimple_,然后再delete其中的兩個類的對象,會出錯。因為在delete結構體時已經把其中的兩個對象空間delete了,再delete兩個對象時其空間已經為空。

    delete pimpl_;
    delete pimpl_->m_pMM;
    delete pimpl_->m_pTaskPlan;
    

這是錯誤的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM