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;