2012-01-19 86 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中將\ 0分配給someLock。這是你的問題嗎? (我沒有讀你的其他問題) – 2012-01-19 02:43:44

+0

我的問題是:如何/何時從C++上下文中釋放ObjC對象。在ARC之前,我只好[someLock發佈];就是這樣。 – verec 2012-01-19 11:27:13

回答

1

在ARC下,當SomeCppClass的實例被銷燬時,someLock將自動釋放。無論您是否定義了自己的析構函數,都會發生這種情況。

您不需要在析構函數中將nil/null賦值給該成員。

+0

謝謝。我不清楚C++如何處理這個問題。我假設你的答案適用於Objective-C++,但不適用於直接的C++,因爲std cpp不能處理除void *之外的任何ObjC,對吧? – verec 2012-01-19 15:50:41

+0

對。一般來說,每當有一個指向ObjC對象的指針填充到void *中時,您就已經獲得了ARC控制範圍之外的內容,或者將其從ARC的控制中移除。所以你像往常一樣獨立。 – 2012-01-19 19:09:02