代码示例应该解释的事情: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