gpt4 book ai didi

c++ - 防止继承 operator new 和 delete

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:00 28 4
gpt4 key购买 nike

(我确实扫描了,但找不到任何类似的东西,如果有欺骗请关闭)。

有没有办法防止这两个运算符被继承?例如:

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 将继承这两个运算符 - 在这种微不足道的情况下,没什么大不了的,如果 foobar 中有数据成员,就会出现问题 (在我的情况下更糟,因为 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
{
};

当然,如果您必须转发构造函数,则涉及更多工作。

关于c++ - 防止继承 operator new 和 delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189157/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com