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将继承这两个操作符 - 在这个简单的情况下,没有这么大的问题,如果有数据成员foo和bar(并且在我的情况下更糟糕,因为foo需要以不同bar的方式完成分配!)现在要避免的方法出现问题就是这样bar,我也会实现运营商.但是,如果有很多派生类型,那么忘记覆盖某个地方的可能性是非常有可能的.所以问题是,有没有办法阻止这些运营商被继承?
注意:c ++ 03(如果特定于gcc,愿意接受一些特定于编译器的解决方案)
您可以定义一个中间 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)
当然,如果您必须转发构造函数,还需要做更多的工作。
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |