Деструктор в Objective-C ++
У меня есть класс objective-C ++, который содержит некоторые честные указатели на объекты С++.
Когда класс Obj-С++ уничтожен, он немедленно вызывает dealloc? Если это так, то лучший способ уничтожить класс С++, поставив
delete obj
в методе dealloc?
Ответы
Ответ 1
Я предполагаю, что когда вы говорите "класс Obj-С++", вы имеете в виду класс Objective-C, который содержит некоторые классы С++.
Objective-C классы не вызывают dealloc при их уничтожении; они уничтожаются путем отправки им сообщения dealloc.
С этим ударом педантизма, если ваш метод init создает экземпляр obj, тогда да, вызовите delete obj
в dealloc:
-(void)dealloc {
delete obj;
[super dealloc];
}
Ответ 2
В качестве дополнения к правильному ответу Фрэнка Шейрара, если вы используете OSX 10.4 или более позднюю версию SDK (и вы, вероятно, знаете, хотя я не уверен, что здесь работает iPhone), вы также можете включить членов С++ из Objective-C классы, т.е. не прибегая к указателю. Проблема в более ранних версиях OSX SDK заключалась в том, что конструктор и деструктор члена С++ просто не будут вызваны. Однако, указав параметр компилятора fobjc-call-cxx-cdtors
(в XCode он отображается как параметр GCC_OBJC_CALL_CXX_CDTORS
), вызовы ctor и dtor будут вызваны. См. Также Apple docs, немного ниже этой страницы.