函数声明后的= delete的含义

class my_class { ... my_class(my_class const &) = delete; ... }; 

在这种情况下, = delete是什么意思?

还有没有其他的“修饰符”(除了= 0= delete )?

删除一个函数是一个C ++ 11function :

现在可以直接expression“禁止复制”的常用成语:

 class X { // ... X& operator=(const X&) = delete; // Disallow copying X(const X&) = delete; }; 

[…]

“删除”机制可以用于任何function。 例如,我们可以消除不希望的转换,如下所示:

 struct Z { // ... Z(long long); // can initialize with an long long Z(long) = delete; // but not anything less }; 
  1. = 0意味着一个函数是纯虚拟的,你不能从这个类实例化一个对象。 你需要从中派生出来并实现这个方法
  2. = delete意味着编译器不会为你生成这些构造函数。 AFAIK这只允许复制构造函数和赋值运算符。 但是我对即将到来的标准不太了解。

= delete是C ++ 11中的一个function介绍。 按照=delete它将不被允许调用该函数。

详细。

假设在一个class级。

 Class ABC{ Int d; Public: ABC& operator= (const ABC& obj) =delete { } }; 

当调用obj赋值这个函数时,它将不被允许。 意味着赋值运算符将限制从一个对象复制到另一个对象。

这是C ++ 0x标准中的新事物,您可以删除inheritance的函数。

新的C ++ 0x标准。 请参阅N3242工作草案中的第8.4.3节

本书摘自C ++编程语言[第4版] – Bjarne Stroustrup着作讲述了使用=delete真正目的

在层次结构中使用缺省副本或移动类通常是一个灾难 :只给出一个指向基的指针,我们不知道派生类具有什么成员(§3.2.2),所以我们不能知道如何复制它们 。 所以,最好的办法通常是删除默认的复制和移动操作,即消除这两个操作的默认定义:

 class Shape { public: Shape(const Shape&) =delete; // no copy operations Shape& operator=(const Shape&) =delete; Shape(Shape&&) =delete; // no move operations Shape& operator=(Shape&&) =delete; ˜Shape(); // ... }; 

现在试图复制Shape将被编译器捕获。

=delete机制是一般的,也就是说,它可以用来抑制任何操作