我有一个实现引用计数的C++类,我希望该类的所有用户只能从该类中虚拟继承,以便没有对象最终具有多个引用计数器。
我想以某种方式在编译时或至少在运行时声明此要求。
有没有办法做到这一点?
最佳答案
我认为包装类是最简单的选择。而不是直接从RefCounter继承,而是创建一个中间类。
struct RefCounterVirtPrivate_
{
int count;
RefCounterVirt()
: count( 0 )
{ }
};
struct RefCounter : public virtual RefCounterVirtPrivate_
{
};
struct A : public RefCounter { };
struct B : public RefCounter { };
struct C : public A, public B { };
这样,所有内容都可以从
RefCounter
继承,而无需关心虚拟继承。您甚至不必更改任何现有代码-RefCounter
本身的虚拟继承应该是无害的。当然,这不能保证人们不会直接从
RefCounterVirtPrivate_
继承,这就是为什么我给它起了一个明显的名字的原因。意外地做到这一点比忘记virtual
关键字更难。关于c++ - 如何检测和断言特定类的虚拟继承?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8559477/