Здесь вызывается конструктор? - PullRequest
1 голос
/ 21 марта 2011
#include<iostream>

class _ctor
{
public:
_ctor() { std::cout<<"\nCtor";}
~_ctor(){ std::cout<<"\nDtor";}
};

_ctor A(); // --> Is the Constructor Really called? I do not see the Output printed
//_ctor A;

int main(){
return 0;
}

Вывод вышеуказанного кода приведен в этой ссылке Я не вижу вызова конструктора, в чем может быть проблема ?? Если это не должно быть вызвано, то что это значит _ctor A();?

Ответы [ 4 ]

10 голосов
/ 21 марта 2011

Вы объявили функцию с именем A(), которая возвращает _ctor, и никогда не вызывали эту функцию.Вы никогда не определяли эту функцию.

Нет, конструктор _ctor не вызывается.

5 голосов
/ 21 марта 2011

Нет, потому что вы фактически объявляете функцию, которая не принимает аргументов и возвращает _ctor.Это называется «самый неприятный разбор». Вы, вероятно, хотите это:

_ctor A;
1 голос
/ 21 марта 2011

Вы объявляете функцию с именем A, которая возвращает объект класса ctor, поэтому конструктор не вызывается.

Если вы хотите создать глобальный объект класса ctor, вы можете сделать:

_ctor A;

, который вызывает конструктор.

0 голосов
/ 21 марта 2011

Чтобы конструктор мог вызывать, программе необходимо создать экземпляр класса _ctor.

_ctor A();

Вышеприведенный оператор является прототипом для функции A(), сообщающей, что его тип возвращаемого значения равен * 1006.*.

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