【问题标题】:Creating a Noncopyable class and inherit into my class创建一个不可复制的类并继承到我的类中
【发布时间】: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


【解决方案1】:

从这个post可以看出vs2010不支持默认或者删除的功能。就此而言,vc11 也不会

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多