2013-02-03 51 views
-1

令人难以置信的Xcode 4.6。因为ARC而导致Xcode 4.6崩溃?

如果我初始化某个变量,它释放内存。但是,如果这个变量具有随机值呢?

class X 
{ 

private: 

    NSThread* thr; 

public: 

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

但是,如果构造函数是内联的,它不会!

+0

它与Xcode有什么关系?如果你使用另一个IDE,你真的认为它不会这么做吗? – 2013-02-03 12:26:53

+0

在Xcode 4.5中,它按预期工作。 如果它在Xcode 4.6中崩溃,那我该如何初始化变量呢? – Michael

+1

@ericgorr他们不是。在C和C++中,常量数值“0”在分配或与指针进行比较时隐含地被视为“NULL”。 – 2013-02-03 12:32:12

回答

3

在C++构造函数中,您需要使用initialization list来设置成员变量的初始值。

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

否则,就像你看到的,thr最初将有一个垃圾值,当ARC尝试发送-release该值可能会崩溃。

作为ARC documentation说:

ARC无法其意为“初始化”动态存储器和一个其目的是可能取代的值的赋值运算符之间进行区分。