Деструктор в Objective C ++

У меня есть Объективный класс C++, которые содержат некоторые честные указатели объекта C++.

Когда Obj-класс-C++ уничтожается, он сразу называет dealloc? Если так, затем лучший способ уничтожить класс C++ путем помещения

delete obj

в dealloc методе?

15
задан John Smith 28 June 2010 в 20:11
поделиться

2 ответа

Я полагаю, когда вы говорите «Класс Obj-C ++», вы имеете в виду класс Objective-C, который случайно содержит некоторые классы C ++.

Классы Objective-C не вызывают dealloc при уничтожении; они уничтожаются отправкой им сообщения об освобождении.

С учетом этого педантизма, если ваш метод инициализации создает экземпляр obj, тогда да, вызовите delete obj в dealloc:

-(void)dealloc {
  delete obj;
  [super dealloc];
}
26
ответ дан 1 December 2019 в 01:38
поделиться

В качестве дополнения к 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 , чуть ниже на этой странице.

8
ответ дан 1 December 2019 в 01:38
поделиться