Почему нет вызова конструктору?
Этот код не ведет себя так, как я ожидаю.
#include<iostream>
using namespace std;
class Class
{
Class()
{
cout<<"default constructor called";
}
~Class()
{
cout<<"destrutor called";
}
};
int main()
{
Class object();
}
Я ожидал, что вызывается "конструктор по умолчанию", но я ничего не видел в качестве вывода. В чем проблема?
Ответы
Ответ 1
Неа. Ваша строка Class object();
Объявлена функция. Вы хотите написать Class object;
Попробуйте.
Вы также можете быть заинтересованы в наиболее неприятном анализе (как отмечали другие). Отличным примером является Эффективный STL. Пункт 6 на стр. 33. (В 12-й печати, сентябрь 2009 г.) В частности, пример в верхней части страницы 35 это то, что вы сделали, и это объясняет, почему парсер обрабатывает его как объявление функции.
Ответ 2
Нет вызова конструктора
Поскольку конструктор никогда не вызван фактически.
Class object();
интерпретируется как объявление функции object
без аргумента и возврата объекта Class
[по значению]
Попробуйте Class object;
ИЗМЕНИТЬ
Как заметил Майк, это не совсем тот же код, что и то, что вы подаете компилятору. Является конструктором/деструктором public
или является Class
структурой?
Однако Google для С++ наиболее неприятный синтаксический анализ.
Ответ 3
Вы можете использовать его следующим образом:
Class obj;
//or
Class *obj = new Class(/*constructor arguments*/);