コードサンプルは物事を説明する必要があります:
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 になるようです。
私は、標準への特定の参照を本当に探しています。
ありがとう。