2010-09-09 64 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