Отличия new A и new A()
От: VladimirVA  
Дата: 06.08.09 08:33
Оценка:
Здравствуйте,
интересует такой вопрос:
код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-типа не может.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.