【发布时间】:2012-03-16 13:01:30
【问题描述】:
我正在尝试创建一个不可复制的类并将其继承到 myclass。代码如下所示:
template<class T>
struct NonCopyable
{
protected:
NonCopyable() {}
private:
NonCopyable(const NonCopyable& x) = delete;
T& operator=(const T& x) = delete;
};
delete 允许第三种机制通过重用 delete 关键字将函数定义为“已删除”。
class Myclass : public RefCnt, private NonCopyable<Myclass>
{
virtual unsigned int GetID() = 0;
virtual bool Serialize() = 0;
};
现在,当我尝试此操作时,我在 VS 2010 上收到错误消息:“NonCopyable”:纯说明符或抽象覆盖说明符仅允许在虚函数上使用。
编译器认为我正在尝试创建一个纯虚函数。有人可以解释为什么吗?我可以通过删除“删除”关键字来解决上述问题。
【问题讨论】:
-
我怀疑答案是:你的编译器还不支持
= delete。我没有 VS 2010 来确认。 -
我也是这么想的,但是如何验证呢?
-
如果你使用
= delete,那么直接使用它而不是从使用它的类继承。是的,VS10 不支持。 -
为什么你的
NonCopyable是一个模板?正如 CatPP 所说,使用 C++11 和delete,你真的不再需要这种结构的拐杖了。只有当你没有一种语义的方式来表达你让一个类不可复制的意图时,它才是好的。 -
这个问题让我产生了这个相关的问题:stackoverflow.com/questions/9458741
标签: c++ c++11 noncopyable