代码示例应该解释一些事情:
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 以确保安全(并且清晰),但是,就目前而言,在构建 A 之后 pB 的值是多少?它是默认初始化(为零?)还是不初始化(即不确定和内存中的任何内容)。我意识到 C++ 中的初始化有很多规则。
我认为它不是默认初始化的;在 Visual Studio 中以调试模式运行时,它已将 pB 设置为 0xcdcdcdcd - 这意味着内存已新建(在堆上)但未初始化。但是在释放模式下,pB 总是指向 NULL。这只是偶然,因此不值得依赖吗?还是这些编译器为我初始化它(即使它不在标准中)?在 Solaris 上使用 Sun 的编译器编译时,它似乎也为 NULL。
我真的在寻找对标准的具体参考来说明一种或另一种方式。
谢谢。