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

moa*_*ala 5 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;
        }
}
Run Code Online (Sandbox Code Playgroud)

用g ++编写:

===========
hey hoy!
===========
hey hoy!
Run Code Online (Sandbox Code Playgroud)

第一种类型的分配不构造对象.我错过了什么?

Jar*_*Par 12

第一种类型的构造实际上并不构造对象.要使用默认构造函数在堆栈上创建对象,必须省略()'s

Object myObjectOnTheStack;
Run Code Online (Sandbox Code Playgroud)

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

  • ......"而是*声明*一个函数"...... (4认同)