假设我有一个带有重载operator new的类。

class Class {
public:
   void* operator new( size_t );
   void operator delete( void* );
};

当我使用operator new时,是否总是使用重载的new Class()来分配该类的对象,或者当operator new构造出现在代码中时是否有可能使用默认的new Class()

最佳答案

除非您明确执行以下操作,否则将始终使用重载的operator newoperator delete:

// Allocate using global new.
MyClass* my_object = ::new MyClass();

// Use object normally.
my_object->my_method();

// Deallocate using global delete.
::delete my_object;

或者,作为一个极端的说明性示例,如下所示:
#include <new>

// Use global placement new to allocate in a buffer created by global new.
MyClass* my_object = ::new(::operator new(sizeof(MyClass))) MyClass()

// Use object normally.
my_object->my_method();

// Explicitly invoke destructor.
my_object->~MyClass();

// Explicitly deallocate memory.
::operator delete(my_object);

希望这可以帮助。

07-28 01:32
查看更多