Пример кода должен объяснить вещи:
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 после построения A? Является ли оно инициализированным по умолчанию (равным нулю ?) или нет (то есть неопределенный и какой бы то ни было в памяти). Я понимаю, что инициализация в C ++ имеет несколько правил.
Я думаю, это не инициализировано по умолчанию; как запущенный в режиме отладки в Visual Studio, он установил pB, указывающий на 0xcdcdcdcd - что означает, что память была новой (в куче), но не инициализирована. Однако в режиме выпуска pB всегда указывает на NULL. Это просто случайно, и поэтому не следует полагаться; или эти компиляторы инициализируют это для меня (даже если это не в стандарте)? Он также выглядит как NULL при компиляции с помощью компилятора Sun в Solaris.
Я действительно ищу конкретную ссылку на стандарт, чтобы сказать так или иначе.
Спасибо.