2010-09-09 62 views

回答

2

重载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); 

希望这帮助。

0

我能想到的唯一可能的例外是放置新(discussed here),但这是一种不同的语法。

5

使用范围分辨率操作符(::)来调用全局定义为operator new,否则会一直使用重载的operator new,除非ofcourse在placement new operator情况下,这是无论如何不打算过载。

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

int main() 
{ 
Test* pTest1 = ::new Test(); 
Test* pTest2 = new Test(); 

/* 
do some stuff 
*/ 

::delete pTest1; 
delete pTest2; 
return 0; 
} 

请注意使用删除操作符的相应定义。

+0

顺便说一句,放置新的可以被重载 - http://stackoverflow.com/questions/3675059/how-could-i-sensibly-overload-placement-operator-new – sharptooth 2010-09-09 12:47:50

+0

是的,我的意思是OP不打算超载在他的例子中。 – Hemant 2010-09-09 12:53:04

+0

@sharptooth:不,它不能。 – GManNickG 2010-09-09 13:47:21