mr_*_*r_T 7 c++ abstract-class private base-class copy-constructor
我在理论上认为这个问题的答案是肯定的.
但是,在实践中,我的编译器(VS2010)似乎并没有在以下情况下抱怨:我有一个抽象基类提供了一些通用接口(但没有数据成员)以及从中派生的各种子类和子类.
class Base
{
public:
Base() {}
virtual ~Base() {}
virtual void interfaceFunction1() = 0;
virtual void interfaceFunction2() = 0;
private:
Base(const Base&); // all derived classes should be uncopyable
Base& operator=(const Base&);
// no data members
};
Run Code Online (Sandbox Code Playgroud)
我的编译器发现甚至在子子类或子子类中实现完整拷贝构造函数也没有问题.
如何确保从Base派生的每个类都是不可复制的?
编辑:如果我理解得很好,这正是Scott Meyers在Effective C++(第3版,2005)第6项中解释的他对类的想法Uncopyable(仅扩展到完整的接口类).是什么让他的想法发挥作用?(我知道他私下继承,但这不应该造成问题)
这应该可以防止编译器为未显式声明的派生类生成复制构造函数。然而,没有什么可以阻止派生类显式声明一个复制构造函数,该构造函数除了调用 的复制构造函数之外,还可以执行其他操作Base。
无法确保派生类可实例化但不可复制。