• ベストアンサー

classのdelete

C++についてです。 class aaa; class bbb; とあったとします。 class aaaは、内部にclass bbb型の配列を 持っているとすると、aaaをdeleteする場合には aaaのデストラクタがcallされると思うのですが bbbのデストラクタは自動でcallされるのでしょうか (class bbbは、明示的にdeleteしないといけないのでしょうか?) 宜しく御願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

class aaa { bbb foo[3]; ... }; むしろdeleteすれば、windowsならエラーが発生します。 deleteはnewしたものに行うのです。 もしclass aaa { bbb* foo; ... };で foo = new bbb(); としたなら delete fooとする必要があります。 newはmalloc(...)とコンストラクタの呼び出し deleteはfree()とデストラクタの呼び出しをセットにしたものといえば わかりやすいでしょうか?

f_attck
質問者

お礼

御回答ありがとうございます。 大変勉強になりました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

class bbb { ... }; class aaa { bbb foo[3]; ... }; みたいな形なら bbb のデストラクタは自動的に呼出されます.

f_attck
質問者

お礼

御回答ありがとうございます。 勉強になりました。 >みたいな形なら bbb のデストラクタは自動的に呼出されます. ということですが、宣言方法等の違いにより デストラクタが自動でcallされないケースが存在する ということでしょうか? ※あげ足を取っているつもりはありません。

関連するQ&A