2016-09-25 6 views
0

私はthisポストを読んでいましたが、私は明確にしたいのですが、動的に作成されたオブジェクトのメンバー変数を明示的に削除する必要がありますか?メンバー変数のC++デストラクタ?

例えば、私は、2つのメンバ変数を持つ持つクラスを持っている

class pointCloud 
{ 
public: 
    pointCloud(); 
    void addPoint(int); 
    point getPoint(int); 

private: 
    int id; 
    std::vector<point> pointArray; 

}; 

、その後、私は、メインでそれを動的にインスタンスを作成します...

int main() 
{ 

    pointCloud* cloud = new pointCloud; 
    cloud->addPoint(8); 

    delete cloud; 
} 

私の理解では、ときということですdelete cloud;が呼び出されると、 'id'と 'pointArray'変数は自動的にメモリから削除/解放されます。これは正しいです?または、これらのメンバー変数を明示的に削除するデストラクタを作成する必要がありますか?

+0

はい、そうです。デストラクタは、動的に割り当てられたメモリを解放する必要があります – SimpleGuy

答えて

1

これらのメンバー変数を明示的に削除するにはデストラクタを作成する必要がありますか?あなたのケースでは

書く必要ない、idがプリミティブ型であるため、pointArrayは既にメモリを解放するデストラクタを持つベクトルです。

しかし、生ポインタ(新しい[]でバッファを割り当てる)を使用する場合は、デストラクタで手動でメモリを解放する必要があります([]を削除する)。

1

あなたはメンバ変数を削除する必要はありません - あなたはそれを作成した場合、あなたはnewで(どこか)を作成どんな、一般的に(newで)、

をしかし、あなたはpointArrayの内容をdeleteする必要がありますdeleteにする必要があります(どこか);それを整理するのはあなたの問題です。
ここではpointCloudを作成し、それを削除しました。それだけです。

関連する問題