Подтвердить что ты не робот

Почему нет вызова конструктору?

Этот код не ведет себя так, как я ожидаю.

#include<iostream>
using namespace std;

class Class
{
    Class()
    {
        cout<<"default constructor called";
    }

    ~Class()
    {
        cout<<"destrutor called";
    }
};

int main()
{    
    Class object();
}

Я ожидал, что вызывается "конструктор по умолчанию", но я ничего не видел в качестве вывода. В чем проблема?

4b9b3361

Ответ 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*/);