0

我有以下代码:

template<typename T>
class derClass : public baseClass<column<T>, column<k>>
{
      //prohibit value semantics
      derClass(const derClass&) = delete;
      derClass& operator= (const derClass&) = delete;

   public:
      ...
}

这段代码有很多我不明白的地方:

  1. 这些是什么delete意思?我没有看到任何delete变量声明。
  2. 为什么我们需要一个将同一类的对象作为参数的构造函数?
  3. 这整行是什么意思:derClass& operator= (const derClass&) = delete;
4

4 回答 4

4

delete是一个新的 C++11 事物,并告诉编译器这些方法不存在。否则编译器会创建它们的默认版本。

获取其自身类的常量引用的构造函数是复制构造函数。复制构造函数的用途应该在任何关于 C++ 的初学者文本中解释。

由于复制构造函数和复制赋值运算符现在已被删除,这意味着您无法derClassderClass.

于 2013-08-20T07:58:58.693 回答
1

您所看到的用于禁用复制构造函数。

有关更多信息,请参阅: 在 C++ 中禁止复制构造函数的最可靠方法是什么?

于 2013-08-20T08:02:02.157 回答
1

值语义是当您的对象表现得像值时:当您将其分配给另一个对象时,第二个对象将具有相同的值,当您更改第一个对象时,第二个对象保持不变。另一种情况是引用语义——当你第一次改变时——第二次改变。

采用相同类的引用的构造函数是复制构造函数,它只是复制对象。第二个定义是赋值运算符。当您将它们标记为delete- 您的对象无法被复制和分配。

于 2013-08-20T08:03:01.847 回答
1
  1. 它是 C++11 语法,本质上意味着“这个类没有 X”,其中 X 首先是一个复制构造函数,其次是一个复制赋值运算符。
  2. 它是一个复制构造函数。这在任何介绍性 C++ 书籍中都有解释。
  3. 它是一个复制赋值运算符。这在任何介绍性 C++ 书籍中都有解释。

总体而言,使用这些deleted特殊功能意味着您不能复制该类的实例,或复制分配给它们:

derClass d1, d2;
derclass d3{d1}; // ERROR: cannot copy
d2 = d1;         // ERROR: cannot copy-assign
于 2013-08-20T08:00:31.043 回答