C++栈上内存分配表现异常

5

关于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个回答

12

第一种构造类型实际上并没有构造对象。为了使用默认构造函数在堆栈上创建一个对象,您必须省略()

Object myObjectOnTheStack;

您当前的定义方式声明了一个名为myObjectOnTheStack的函数,它返回一个 Object


尝试使用Object myObjectOnTheStack;,即不带() - Justicle
4
"instead declares a function" 翻译为中文是:"而是声明了一个函数"。 - Potatoswatter

4

这是“最令人烦恼的解析”问题的又一个例子。你并没有定义一个对象,而是声明了一个名为myObjectOnTheStack的函数,它不接受任何参数并返回一个Object


2
Object myObjectOnTheStack();

这是一个函数 myObjectOnTheStack 的前置声明,它不带参数并返回一个 Object

你需要的是:

Object myObjectOnTheStack;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接