Xcode 4.6中令人难以置信。
如果我将变量初始化为某个东西,它会释放内存。但是如果这个变量有一个随机值呢?
class X
{
private:
NSThread* thr;
public:
X();
};
X :: X()
{
thr = 0; // BOOM !!!?
}
X* x = new X(); // Constructor crashes.
但是如果构造函数是内联的,那就不是!
答案 0 :(得分:3)
在C ++构造函数中,您需要使用initialization list来设置成员变量的初始值。
X :: X() : thr(nil)
{
}
否则,就像您看到的那样,thr
最初会有垃圾值,当ARC尝试将-release
发送到该值时,您可能会崩溃。
正如ARC documentation所说:
ARC无法区分用于“初始化”动态内存的赋值运算符和可能用于替换值的赋值运算符。