防止继承operator new和delete

Nim*_*Nim 5 c++ inheritance operator-overloading

(我确实扫描了,但是找不到任何类似的东西,如果请尽快关闭).

有没有办法阻止这两个运营商被继承?例如:

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

struct bar : public foo {
};
Run Code Online (Sandbox Code Playgroud)

现在bar将继承这两个操作符 - 在这个简单的情况下,没有这么大的问题,如果有数据成员foobar(并且在我的情况下更糟糕,因为foo需要以不同bar的方式完成分配!)现在要避免的方法出现问题就是这样bar,我也会实现运营商.但是,如果有很多派生类型,那么忘记覆盖某个地方的可能性是非常有可能的.所以问题是,有没有办法阻止这些运营商被继承?

注意:c ++ 03(如果特定于gcc,愿意接受一些特定于编译器的解决方案)

Nor*_*ame 3

您可以定义一个中间 foo ,它再次调用全局 new/delete 并从中派生。

class foo_without_new : public foo
{
protected: 
 foo_without_new(){} // only derived types should be able to construct foo_without_new!
public:    
 void *operator new(size_t sz) 
 { 
     return ::operator new(sz);
 }
 void operator delete(void*p) 
 { 
     return ::operator delete(p);
 }
}; 

class Bar : public FooWithoutNew
{
};
Run Code Online (Sandbox Code Playgroud)

当然,如果您必须转发构造函数,还需要做更多的工作。