Глобальный оператор delete - грамматика - PullRequest
0 голосов
/ 09 марта 2011

Я унаследовал неизменную структуру C, которая содержит указатели на (alloc'd) память.

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

Я хотел бы использовать new и delete для этих объектов, и мне было интересно, возможно липерегрузить удалить в глобальной области видимости.У меня нет возможности переписать структуру / класс в первую очередь.Проблема в том, что я не могу найти правильную грамматику.Это то, что у меня есть - оно компилируется, но, очевидно, не работает, поскольку функция применяется ко всем вызовам удаления:

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

Я пытаюсь сделать невозможное?Я читал, что перегрузка удаления оператора не обязательно должна быть функцией-членом, но предоставляет ли это средство для написания общего удаления для всех указателей?

1 Ответ

3 голосов
/ 09 марта 2011

Хм, похоже на кувалдный подход, если вы просто пользователь этой структуры и беспокоитесь о ее аспекте управления памятью, но не можете изменить его, почему бы вам не обернуть его в свой код?

т.е.

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

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

  private:
    T _inst;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...