代碼示例應該解釋的事情:C++:成員指針初始化?
class A
{
B* pB;
C* pC;
D d;
public :
A(int i, int j) : d(j)
{
pC = new C(i, "abc");
} // note pB is not initialised, e.g. pB(NULL)
...
};
顯然的pB應當被初始化爲NULL,明確地是安全的(和明確的),但是,因爲它的立場,什麼是PB的建設後的價值?它是否默認初始化(它是零?)還是不存在(即不確定和內存中的任何內容)。我意識到在C++中初始化有一些公平的規則。
我認爲這不是默認初始化;在Visual Studio中以調試模式運行時,它將pB指向0xcdcdcdcd--這意味着內存已經被新建(在堆上),但未初始化。但是在釋放模式下,pB總是指向NULL。這是偶然的,因此不能被依賴;還是這些編譯器爲我初始化它(即使它不在標準中)?在Sun的Solaris編譯器上進行編譯時,它似乎也是NULL。
我真的很想找一個具體的標準來說一種或另一種說法。
謝謝。
不確定(和一些編譯器會警告),但我沒有C++標準方便... – ephemient 2009-07-17 16:21:11
B是一個隨機指向野外的指針。注意。在調試模式下,大多數編譯器會將其初始化爲NULL(據說有助於調試)。但在發佈模式下,它將具有先前在內存中的值。 – 2009-07-17 16:25:32