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 ; 
     // ? 
    } 
} 

Guess мне пришлось столкнуться противоположный случай мой предыдущий вопрос :-)

+0

Вам не нужно назначать \ 0 на someLock в dtor. Это ваш вопрос? (Я не читал ваш другой вопрос) –

+0

Мой вопрос: как/когда я освобождаю объект ObjC из контекста C++. Pre-ARC, я просто должен был [someLock release]; и все. – verec

ответ

1

В ARC, когда экземпляр SomeCppClass уничтожен, someLock будет выпущен автоматически. Это произойдет независимо от того, определяете ли вы свой собственный деструктор.

Вам не нужно назначать nil/null этому члену в вашем деструкторе.

+0

Спасибо. Мне было непонятно, как обстоит дело с C++. Я предполагаю, что ваш ответ действителен для Objective-C++, но не для прямого C++, поскольку std cpp не сможет справиться с чем-либо ObjC, кроме void *, правильно? – verec

+0

Справа. Обычно в любое время у вас есть указатель на объект ObjC, заполненный в пустоте *, то вы либо получили, что вне контроля ARC или моста вытеснили его из управления ARC. Таким образом, вы сами по себе там, как обычно. –

Смежные вопросы