具有已删除方法的C ++类是否可以轻松复制?

时间:2014-09-14 07:20:48

标签: c++ c++11 language-lawyer

我希望B类继承除A类的几个方法之外的所有方法(假设它们都是可复制的),并且仍然可以轻易地复制。在C ++ 11中,我可以删除方法。举个例子:

class A { // trivially copyable
   // private stuff here
public:
   A& operator += (const A&);
   // other public stuff here
};

class B: public A {
public:
   B& operator += (const A&) = delete;
};

B是否可以复制?我知道有关删除特殊方法的问题,但复合赋值不是一种特殊的方法(对吧?)。

2 个答案:

答案 0 :(得分:9)

是的,B可以轻易地复制 - 无论您对非特殊成员函数做什么。

  

N3337,§9/ 6

     

平易可复制的课程是一个课程:
- 没有非平凡的   复制构造函数(12.8),
- 没有非平凡的移动构造函数   (12.8),
- 没有非平凡的副本分配操作员(13.5.3,12.8),
   - 没有非平凡的移动赋值运算符(13.5.3,12.8)和 -   有一个简单的析构函数(12.4)。

  

但是复合赋值不是一种特殊的方法(对吧?)

不,不是。

  

N3337,§12/ 1

     

默认构造函数(12.1),复制构造函数和复制赋值   operator(12.8),移动构造函数和移动赋值运算符(12.8),   和析构函数(12.4)是特殊成员函数

答案 1 :(得分:3)

我认为你是在正确的轨道上 - 如果A是可以轻易复制的,B是从A派生的,只是删除了一些常规方法(或运算符),B也可以轻易地复制。