假设我有一个带有重载operator new
的类。
class Class {
public:
void* operator new( size_t );
void operator delete( void* );
};
当我使用
operator new
时,是否总是使用重载的new Class()
来分配该类的对象,或者当operator new
构造出现在代码中时是否有可能使用默认的new Class()
? 最佳答案
除非您明确执行以下操作,否则将始终使用重载的operator new
和operator 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);
希望这可以帮助。