堆栈上的c ++分配很奇怪

时间:2010-02-18 23:24:45

标签: c++ oop stackalloc

使用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 个答案:

答案 0 :(得分:12)

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

Object myObjectOnTheStack;

您当前的定义样式会声明一个名为myObjectOnTheStack的函数,该函数返回Object

答案 1 :(得分:4)

“最令人烦恼的解析”的另一个例子。你没有定义一个对象,而是声明了一个名为myObjectOnTheStack的函数,该函数不带参数并返回Object

答案 2 :(得分:2)

Object myObjectOnTheStack();

是函数myObjectOnTheStack的前向声明,不带参数并返回Object

你想要的是

Object myObjectOnTheStack;