【发布时间】:2015-07-08 09:57:26
【问题描述】:
我认为理论上这个问题的答案是肯定的。
然而,实际上,我的编译器 (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
};
我的编译器发现即使在子类或子子类中实现完整的复制构造函数也不成问题。
如何确保从 Base 派生的每个类都是不可复制的?
编辑:如果我理解得很好,这正是 Scott Meyers 在 Effective C++(2005 年第 3 版)第 6 项中解释的他对 Uncopyable 类的想法(仅在此处扩展为一个完整的接口类)。使他的想法奏效的区别是什么? (我知道他是私下继承的,但这应该不成问题)
【问题讨论】:
-
可能是添加一个虚拟数据成员。
-
你测试过其他编译器吗?也提供一个派生类会很好;)(实际上更像是一个可编译的例子。)
-
没有标记为virtual的纯函数有什么用?
-
@MarcoA。我能想到的唯一目的是触发编译错误。我会将其归结为“SO 过于简单化”。
-
请发布 MCVE。这个should work.
标签: c++ abstract-class private copy-constructor base-class