Здравствуйте,
интересует такой вопрос:
код1
class A {
int a;
};
int main() {
one: A *pa1 = new A;
two: A *pa2 = new A();
}
Почему во втором случае A::a == 0, а в первом там находится "мусор".
(MS Visual studio 2008, Release, с отключенной оптимизацией)
А вот в таком случае:
код2
class A {
public:
virtual void f() {;}
private:
int a;
};
int main() {
one: A *pa1 = new A;
two: A *pa2 = new A();
}
Мусор в A::a в обоих случаях.
Посмотрел стандарт и disassembly, ничего понятного или по теме не нашел.
Объясните пожалуйста ситуацию, если можно, с ссылкой на стандарт или еще куда.
Или это просто совпадение, что в
[код1] one: A::a == 0?
Но ведь memset 0 он делает, судя по дизасму, а для не pod-типа не может.