Xcode(GCC)には、「Call C++ Default Ctors/Dtors in Objective-C」というオプションがあります。
これを ON にすると、 Objective-C のクラスメンバに C++ クラスオブジェクトを持ったときに
C++ クラスオブジェクトのコンストラクタとデストラクタが呼ばれるようになります。
#import <Cocoa/Cocoa.h> #include <iostream> using namespace std; // C++ struct CppHoge { CppHoge() { cout << "constructor" << endl; } void cppFoo() const { cout << "cppFoo" << endl; } ~CppHoge() { cout << "destructor" << endl; } }; // Objective-C @interface ObjcHoge : NSObject { CppHoge cpp_; } - (id)init; @end @implementation ObjcHoge - (id)init { if (self = [super init]) { cout << "init" << endl; } return self; } - (void)objcFoo { cout << "objcFoo" << endl; cpp_.cppFoo(); } - (void)dealloc { cout << "dealloc" << endl; [super dealloc]; } @end int main() { ObjcHoge* p = [[ObjcHoge alloc] init]; [p objcFoo]; [p dealloc]; }
constructor init objcFoo cppFoo dealloc destructor
今まではこのオプション使ってなかったので、 C++ クラスオブジェクトをポインタにして new/delete してました。。。