C++ распределение в стеке действует с любопытством

Любопытные вещи с g++ (может быть, также с другими компиляторами?):

struct Object {
        Object() { std::cout << "hey "; }
        ~Object() { std::cout << "hoy!" << std::endl; }
};

int main(int argc, char* argv[])
{
        {
                Object myObjectOnTheStack();
        }
        std::cout << "===========" << std::endl;
        {
                Object();
        }
        std::cout << "===========" << std::endl;
        {
                Object* object = new Object();
                delete object;
        }
}

В соответствии с G ++:

===========
hey hoy!
===========
hey hoy!

Первый тип размещения не создает объект. Что мне не хватает?

3 ответа

Решение

Первый тип строительства на самом деле не строительство объекта. Чтобы создать объект в стеке с использованием конструктора по умолчанию, вы должны опустить ()"s

Object myObjectOnTheStack;

Вместо этого ваш текущий стиль определения объявляет функцию с именем myObjectOnTheStack, которая возвращает Object,

Еще один пример "самого неприятного разбора". Вместо определения объекта вы объявили функцию с именем myObjectOnTheStack который не принимает аргументов и возвращает Object,

Object myObjectOnTheStack();

является предварительным объявлением функции myObjectOnTheStack не принимая никаких параметров и возвращая Object,

Что вы хотите

Object myObjectOnTheStack;
Другие вопросы по тегам