Любопытные вещи с 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;
}
}
Compied с g ++:
===========
hey hoy!
===========
hey hoy!
Первый тип выделения не создает объект. Что я пропускаю?
Первый тип конструкции фактически не создает объект. Чтобы создать объект в стеке с помощью конструктора по умолчанию, вы должны опустить ()
Object myObjectOnTheStack;
. В вашем текущем стиле определения вместо этого объявляется функция с именем myObjectOnTheStack, которая возвращает Object
.
Еще один пример "самого неприятного синтаксического анализа". Вместо определения объекта вы объявили функцию с именем myObjectOnTheStack
, которая не принимает аргументов и возвращает объект
.
Object myObjectOnTheStack();
это прямое объявление функции myObjectOnTheStack
, не принимающей никаких параметров и возвращающей Object
.
То, что вам нужно, это
Object myObjectOnTheStack;