Bjarne:我能防止别人继承我自己的类吗?
是的,但是你为什么这么做?这是两个常见的答案:
效率:避免我的函数被虚拟调用。
安全性:确保我的类不被用作基类(例如,确保我可以复制对象而不用担心发生意外)
根据我的经验,效率的原因往往是不必要的担心。在C++中,虚函数调用是如此之快,以至于在一个包含虚函数的类中实际使用时,与普通的函数调用相比,根本不会产生任何值得考虑的运行时开销。请注意,虚拟调用机制将仅由指针或引用使用。当直接通过对象名调用函数时,可以很容易地优化虚函数调用的开销。
如果确实需要密封一个类来防止虚调用,那么也许你应该先问为什么它们是虚的。我见过一些例子,性能很差的函数被设置为虚拟的,原因无非是“我们习惯这样做了”。
这个问题的另一部分,如何防止类由于逻辑原因被继承,有一个解决方案。遗憾的是,这个方案并不完美。它基于这样一个事实,即大多数继承的类必须建立一个虚拟基类。这是一个例子:
类可用;
class Usable _ lock {
friend class Usable;
private:
Usable _ lock(){ }
Usable _ lock(const Usable _ lock &){ }
};
类Usable:public virtual Usable _ lock {
//...
公共:
可用();
可用(char *);
//...
};
可用a;
class DD:公共可用{ };
DD DD;//错误:DD::DD()无法访问
/usable _ lock::usable _ lock()是私有成员
0条评论