Objective-C++」カテゴリーアーカイブ

Objective-Cクラス内の C++オブジェクトのメンバはデフォルトコンストラクタ、デストラクタがちゃんと呼ばれる

いにしえのObjective-C++はObjective-Cクラスの中にC++オブジェクトのメンバを入れてしまうと、そのオブジェクトのコンストラクタとデストラクタが呼ばれないという悲しい仕様でした。

でした。

過去形です。そんなのは昔の話しです。今はinit時にデフォルトコンストラクタが、dealloc時にデストラクタがきちんと呼ばれるようになってます。

昔はC++オブジェクトをObjective-Cのクラスメンバとして持つためにはオブジェクトのポインタを持つようにして、-initでnewして、-deallocでdeleteする、なんてことをしなければなりませんでした。。。

GCD時代では “Call C++ Default Ctors/Dtors in Objective-C” というコンパイラオプションがいつの間にか増えてて、このオプションを有効にすることによって大丈夫になってた模様。

そして現在のClang時代ではそんなオプションもなく、当たり前のようにC++オブジェクトをメンバに持てる。と。

いい時代になりました。

C++オブジェクトメンバのデフォルトコンストラクタ以外のコンストラクタを呼ぶ方法は知らん。たぶん無い。