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