全局运算符删除 - 语法

时间:2011-03-09 11:27:07

标签: c++ operator-overloading

我继承了一个不可更改的C结构,其中包含指向(alloc'd)内存的指针。

   typedef struct {
     int id;
     int * val;
   } T;

我想在这些对象上使用new和delete,我想知道是否可以在全局范围内重载delete。我首先没有选择重写struct / class的选项。麻烦的是我找不到正确的语法。这就是我所拥有的 - 它编译但很明显失败,因为该函数应用于所有删除调用:

   void operator delete(void*p) throw() {
     T * t = reinterpret_cast<T*>(p);
     free(p->val);
   }

我是否尝试过不可能的事情?我已经读过,操作符删除重载不一定是成员函数,但这只是提供了为所有指针编写泛型删除的方法吗?

1 个答案:

答案 0 :(得分:3)

嗯,好像是一个大锤的方法,如果你只是这个结构的用户,并担心它的内存管理方面,但却无法修改它,为什么不把它包装在你的代码中?

class Sane_T
{
  public:
   Sane_T() 
   { 
     // do stuff 
   } 

   ~Sane_T()
   {
     // Now cleanup..
     if (_inst.val)
       free(_inst.val);
   }

  private:
    T _inst;
};