How operator new calls the constructor of class?

前端 未结 3 410
Happy的楠姐
Happy的楠姐 2021-01-13 09:45

I know that, new operator will call the constructor of class.

But how it\'s happening, what is ground level techniques used for this.

相关标签:
3条回答
  • 2021-01-13 10:00

    It's not really the new operator that calls the constructor. It is more the compiler that translate the following line:

    MyClass * mine = new MyClass();
    

    Into the following:

    MyClass * mine = malloc(sizeof(MyClass));  // Allocates memory
    mine->MyClass();                           // Calls constructor
    

    With other error handling code that other answers have noted.

    0 讨论(0)
  • 2021-01-13 10:11

    The compiler generates machine code for that. When the compiler sees

    CSomeClass* object = new CSomeClass();
    

    (new statement) it generates code that calls the appropriate operator new() (which allocates memory), calls the right constructor, calls destructors of all fully constructed subobjects in case of exception, calls operator delete() in case an exception occurs during construction. All this is done by extra machine code generated by the C++ compiler for that simply looking statement.

    0 讨论(0)
  • 2021-01-13 10:13

    Here is how I imagine it:

    T* the_new_operator(args)
    {
        void* memory = operator new(sizeof(T));
        T* object;
        try
        {
            object = new(memory) T(args);   // (*)
        }
        catch (...)
        {
            operator delete(memory);
            throw;
        }
        return object;
    }
    

    (*) Technically, it's not really calling placement-new, but as long as you don't overload that, the mental model works fine :)

    0 讨论(0)
提交回复
热议问题