Когда вызывается конструктор? - PullRequest
18 голосов
/ 08 февраля 2011

В каком из следующих конструкторов myClass вызывается?

1.  myClass class1;
2.  myClass* class1;
3.  myClass* class1 = new myClass;

Большое спасибо

Ответы [ 5 ]

32 голосов
/ 08 февраля 2011
  1. Да - конструктор по умолчанию, экземпляр создан в стеке
  2. Нет
  3. Да - конструктор по умолчанию, экземпляр создается в куче
5 голосов
/ 08 февраля 2011
  1. Оператор установит объект в стеке, вызовет c'tor.
  2. Определяет только переменную-указатель в стеке, конструктор не вызывается.
  3. Новый операторсоздаст объект в свободном хранилище (обычно в куче) и вызовет c'tor.

Но этот код не будет создавать экземпляр какого-либо объекта, так как он не компилируется.;-) Попробуйте это:

myClass class1; 
myClass* class2;
myClass* class3 = new myClass; 
  • класс 1 - это локальная переменная (в стеке), вызываемый конструктор.
  • класс 2 - указатель, конструктор не вызывается.
  • класс 3 - указатель, конструктор вызывается при выполнении new.
5 голосов
/ 08 февраля 2011

В # 1 и # 3, так как вы на самом деле делаете экземпляр объекта. В # 2 вы просто объявляете указатель, который не указывает на экземпляр.

1 голос
/ 08 февраля 2011

Конструктор вызывается в случаях 1 и 3, когда создается экземпляр класса. Другой (2) объявляет только указатель.

1 голос
/ 08 февраля 2011

1 и 3, потому что в них вы создаете объект myClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...