c++oopstackalloc

c++ allocation on the stack acting curiously


Curious things with g++ (maybe also with other compilers?):

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 with g++:

===========
hey hoy!
===========
hey hoy!

The first type of allocation does not construct the object. What am I missing?


Solution

  • The first type of construction is not actually constructing the object. In order to create an object on the stack using the default constructor, you must omit the ()'s

    Object myObjectOnTheStack;
    

    Your current style of definition instead declares a function named myObjectOnTheStack which returns an Object.