Search code examples
c++constructormalloclifetimeplacement-new

Malloc and constructors


Unlike new and delete expressions, std::malloc does not call the constructor when memory for an object is allocated. In that case, how must we create an object so that the constructor will also be called?


Solution

  • Er...use new? That's kind of the point. You can also call the constructor explicitly, but there's little reason to do it that way

    Using new/delete normally:

    A* a = new A();
    
    delete a;
    

    Calling the constructor/destructor explicitly ("placement new"):

    A* a = (A*)malloc(sizeof(A));
    new (a) A();
    
    a->~A();
    free(a);