コードサンプルは、物事を説明する必要があります:それはスタンドとして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を指しています。つまり、メモリはヒープ上にnew'dされていて初期化されていません。ただし、リリースモードでは、pBは常にNULLを指します。これはちょうど偶然のことなので、それに頼ることはありません。またはこれらのコンパイラは私のために初期化しています(それが標準にない場合でも)?また、Solaris上でSunのコンパイラでコンパイルすると、NULLと思われます。
私は本当にどちらか一方の方法で標準への具体的な参照を探しています。
ありがとうございました。
不確定(および一部のコンパイラは警告するでしょうが)、私はC++標準を手に入れません。 – ephemient
Bは野生の中へのランダムなポインタです。注意。デバッグモードでは、ほとんどのコンパイラはそれをNULLに初期化します(おそらくデバッグに役立ちます)。しかし、リリースモードでは、以前にメモリにあった値を持ちます。 –