정직한 C++ 객체 포인터가 포함 된 objective-C++ 클래스가 있습니다.Objective-C++의 소멸자
Obj-C++ 클래스가 소멸되면 즉시 dealloc가 호출됩니까? 그렇다면, dealloc 메서드에서
delete obj
을 넣어서 C++ 클래스를 파괴하는 가장 좋은 방법은 무엇입니까?
정직한 C++ 객체 포인터가 포함 된 objective-C++ 클래스가 있습니다.Objective-C++의 소멸자
Obj-C++ 클래스가 소멸되면 즉시 dealloc가 호출됩니까? 그렇다면, dealloc 메서드에서
delete obj
을 넣어서 C++ 클래스를 파괴하는 가장 좋은 방법은 무엇입니까?
"Obj-C++ class"라고 할 때 Objective-C 클래스가 일부 C++ 클래스를 포함한다고 생각합니다.
Objective-C 클래스는 파괴 될 때 dealloc을 호출하지 않습니다. 그들은 dealloc 메시지를 보내서 파괴됩니다. 당신은을 사용하여 제공
-(void)dealloc {
delete obj;
[super dealloc];
}
프랭크 Shearar의 정답에 대한 보충 : 당신의 초기화 방법은 다음 OBJ를 인스턴스화 경우 탈출구 학자 인의 비트와
, 예,의 dealloc에서delete obj
전화 OSX 10.4 또는 그 이후 버전의 SDK (그리고 아마 당신은 아이폰 런타임에 대해서는 잘 모르겠지만) 포인터를 사용하지 않고 Objective-C 클래스의 C++ 멤버를 포함시킬 수도 있습니다. 이전 버전의 OSX SDK의 문제는 C++ 멤버의 생성자와 소멸자가 호출되지 않는다는 것입니다. 그러나 컴파일러 옵션을 지정하면 (XCode에서는 설정이
GCC_OBJC_CALL_CXX_CDTORS
으로 표시됨) ctor 및 dtor가 호출됩니다. 해당 페이지의 아래쪽 비트 인
Apple docs도 참조하십시오.
포인터를 감싸는 동안 포인터를 저장해야하는 경우에도 작동합니다. 예 : 'std :: unique_ptr'에서 – Sebastian
ARC는 dealloc 메시지를 보내는 것을 금지합니다. ARC를 대답 할 때 [[super dealloc]]을 호출 할 필요가 없습니다 [here] (http://stackoverflow.com/questions/7292119/custom-dealloc-using-arc-objective -c) – benjineer
@benjineer이 답변이 작성되었을 때 ARC는 아직 공개되지 않았지만'[super dealloc]'이 ARC와 호환되지 않는다는 것이 맞습니다. –