我有一個問題:爲什麼C++實例在通過Objective-c類調用時自動調用構造函數和析構函數?
我沒有明確「new
」和「delete
」我的C++實例,但是它會自動調用「new
」和「delete
」的時候,Objective-C類初始化。任何想法?
class myCppTestClass
{
public:
myCppTestClass()
{
NSLog(@"MyCpp constructor");
}
~myCppTestClass()
{
NSLog(@"MyCpp destructor");
}
};
@interface MyTestClass : NSObject
{
myCppTestClass myCppInstance;
}
@end
@implementation MyTestClass
@end
我這樣稱呼它:
NSLog(@"Create an object.");
MyTestClass *objcObject = [[MyTestClass alloc] init];
NSLog(@"Object created");
[objcObject release];
objcObject = nil;
NSLog(@"Object released.");
然後我運行它,日誌是這樣的:
2012-11-16 12:01:18.747 iOSVersion[87248:f803] Create an object.
2012-11-16 12:01:18.749 iOSVersion[87248:f803] MyCpp constructor
2012-11-16 12:01:18.750 iOSVersion[87248:f803] Object created
2012-11-16 12:01:18.751 iOSVersion[87248:f803] MyCpp destructor
2012-11-16 12:01:18.752 iOSVersion[87248:f803] Object released.
這不是自動引用Counnting,因爲它是封閉, 有任何想法嗎?非常感謝。
同樣,如果MyTestClass是這樣的,構造函數和析構函數不會被調用:
@interface MyTestClass : NSObject
{
myCppTestClass * myCppInstance;
}
和日誌:
2012-11-16 12:22:38.710 iOSVersion[87428:f803] Create an object.
2012-11-16 12:22:38.711 iOSVersion[87428:f803] Object created
2012-11-16 12:22:38.712 iOSVersion[87428:f803] Object released.
它的時候都沒有指針或引用C++對象是如何工作的。 –
你的意思是'myCppTestClass myCppInstance;'? – lijinma
是的,變量聲明通過一些運行時嚮導來分配對象時調用缺省構造函數。 –