2013-02-03 109 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無法其意爲「初始化」動態存儲器和一個其目的是可能取代的值的賦值運算符之間進行區分。