2012-04-10 20 views
7

デストラクタが実装されているオブジェクトを指している2つのポインタを持つ構造体があるとします。私はListnodeポインタの頭 "にdelete予約語を使用する場合、それは内部にデストラクタを呼び出します構造体のポインタを削除すると構造体内のポインタも削除されますか?

struct Listnode {  
    Student *student; 
    Listnode *next; 
}; 
Listnode *head = new Listnode; 

:非NULL値を持つListnode構造へのヘッドポイントは*学生と*次のことを前提としてい「学生」および「次の」ポイント先のそれぞれのクラスおよびリストノードクラスを構成します。言い換えれば、* headもdelete * studentと* nextのheadがそのListノードへの唯一のポインターである

答えて

10

デストラクタ~Listnodeがポインタでdeleteを呼び出していない限り、そうではありません。ただし、deleteを呼び出すと、非ポインタメンバーのデストラクタが呼び出されます。

+0

構造体のデストラクタを実装できますか? –

+2

@PatMurray絶対に!クラスでできることは何でも、あなたは 'struct'でも行うことができます。実際のところ、唯一の違いは、最初のアクセス宣言(public、private、またはprotected)前のクラスのメンバーはprivateとみなされ、structの同じメンバーはpublicとみなされる点です。 – dasblinkenlight

+0

Structsは同じようなクラスを継承することができ、デフォルトの継承アクセスはstructの場合はpublic、クラスの場合はprivateです。別の違いが、同じ行に沿って。 – MSalters

1

いいえ!それらを手動で最初に削除する必要がありますが、削除コードをデストラクターメソッドに追加することもできます。

関連する問題