Запретить наследование операторами new и delete

(Я просканировал, но не смог найти ничего похожего, если обман, пожалуйста, закройте).

Есть ли способ предотвратить это два оператора от наследования? Например:

struct foo{
  static void* operator new(std::size_t) { 
    // special
  }
  static void operator delete(void* p, std::size_t) { 
    // special
  }
};    

struct bar : public foo {
};

Теперь bar унаследует два оператора - в этом тривиальном случае, не такой большой проблемой, возникает проблема, если в foo и bar (и еще хуже в моем случае, поскольку выделение для foo должно выполняться иначе, чем bar !) Теперь способ избежать этого заключается в том, что в bar я бы тоже реализовал операторы. Однако, если есть много производных типов, вероятность того, что вы забудете что-то переопределить, вполне возможна. Итак, вопрос в том, есть ли способ предотвратить использование этих операторов унаследовано?

ПРИМЕЧАНИЕ: c ++ 03 (и готов принять какое-то решение, специфичное для компилятора, если оно специфично для gcc)

5
задан Nim 25 August 2011 в 10:55
поделиться