-1

Xcode 4.6 では信じられません。

変数を何かに初期化すると、メモリが解放されます。しかし、この変数がランダムな値を持つ場合はどうなるでしょうか?

class X 
{

private:

    NSThread* thr;

public:

    X();
}; 
X :: X()
    {
        thr = 0; // BOOM !!!?
    }
X* x = new X(); // Constructor crashes.

しかし、コンストラクターがインラインの場合はそうではありません!

4

1 に答える 1

3

C++ コンストラクターでは、初期化リストを使用してメンバー変数の初期値を設定する必要があります。

X :: X() : thr(nil) 
{
}

そうしないと、ご覧のように、thr最初はガベージ値があり、ARC-releaseがその値に送信しようとするとクラッシュする可能性があります。

ARCのドキュメントにあるように:

ARC は、動的メモリを「初期化」することを目的とした代入演算子と、潜在的に値を置き換えることを目的とした代入演算子を区別できません。

于 2013-02-03T13:25:08.310 に答える