-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 回答