2012-01-19 2 views
1

ARC/ObjC++ : ObjC 객체는 C++ 멤버 변수로ARC는/ObjC++ : ObjC 객체는 C++ 멤버 변수로

class SomeCppClass { 
    NSLock * someLock ; 
    public: 
    SomeCppClass() { 
     someLock = [[NSLock alloc] init] ; 
    } 
    void atomicInsert(SomeOtherCppClass * c) { 
     [someLock lock] ; 
     // do atomic C++ stuff 
     [someLock unlock] ; 
    } 

    ~SomeCppClass() { 
     // ? Huh ? 
     // ? can I just say: 
     someLock = 0 ; 
     // ? 
    } 
} 

추측을 고려 나는 :-) 내 앞의 질문의 반대의 경우가 발생했다

+0

dtor에 someLock에 \ 0을 할당 할 필요가 없습니다. 그것이 당신의 질문입니까? (나는 당신의 다른 질문을 읽지 않았다) –

+0

내 질문은 : 어떻게/언제 C++ 컨텍스트에서 ObjC 개체를 할당 취소합니까. Pre-ARC, 나는 단지 [someLock release]해야만했다. 그리고 그 것이었다. – verec

답변

1

ARC에서 SomeCppClass의 인스턴스가 삭제되면 someLock이 자동으로 해제됩니다. 자신의 소멸자를 정의하는지 여부에 관계없이이 작업이 수행됩니다.

소멸자의 해당 멤버에 nil/null을 지정할 필요가 없습니다.

+0

감사합니다. C++ 측에서이 문제를 다루는 방법이 나에게는 분명하지 않았습니다. 귀하의 대답은 Objective-C++에 대해서는 유효하다고 가정하고 있지만 C++에는 적합하지 않습니다. std cpp는 void *를 제외한 ObjC를 처리 할 수 ​​없으므로 그렇지 않습니까? – verec

+0

오른쪽. 일반적으로 void *에 채워진 ObjC 객체에 대한 포인터를 가질 때마다 ARC의 컨트롤 외부에서 얻은 것이거나 ARC의 컨트롤에서 벗어난 것입니다. 평소와 같이 스스로 거기에 있습니다. –

관련 문제