Properly Overloading new/delete new[]/delete[]
这是我上一个问题的跟进,
使用malloc初始化类
问题的已接受答案有效,并在avr-gcc上给了我new / delete,这是问题所在,但是我的重载new delete wrack破坏了常规gcc,重载new delete的正确方法是什么? 类,所以理想情况下,我只想为我的对象覆盖new delete,这样它就不会与stl stdlib等混淆。
'new'和'delete'可以在常见的
1 2 3 4 5 6 7 8 9 | class Object { public: void* operator new (size_t size); void operator delete (void *p); }; class Derived : public Object { // uses the above versions of new/delete }; |
[注意:这对您来说是一个额外的优势,因为您所有的类都来自一个常见的
在您自己的类中而不是全局地重载
例如:如果您的公共类的名称是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | void *YourClass::operator new(size_t size) { void *p; cout <<"In overloaded new."; p = malloc(size); if(!p) { throw std::bad_alloc; //Throw directly than with named temp variable } return p; } void YourClass::operator delete(void *p) { cout <<"In overloaded delete. "; free(p); } void *YourClass::operator new[](size_t size) { void *p; cout <<"Using overload new[]. "; p = malloc(size); if(!p) { throw std::bad_alloc; } return p; } void YourClass::operator delete[](void *p) { cout <<"Free array using overloaded delete[] "; free(p); } |
从