2012-01-19 9 views
1

ARC /にObjC++などにObjCオブジェクトは:C++メンバ変数ARC /にObjC++:C++メンバ変数

ようにObjCオブジェクトが

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のコントロールからブリッジをキャストします。あなたはいつものようにあなた自身の上にいます。 –