复制构造函数,析构函数和赋值运算符.什么时候不需要它们?

Cal*_*ius 5 c++ standards destructor copy-constructor assignment-operator

当你将cctor,dtor或op =添加到你的类时,我知道C++的经验法则,你需要添加其他两个,以使你的类在所有情况下都能正常工作.

有什么情况下你不需要提供所有三个,只有一个或两个?

如果你将其中一个添加到你的类中,为什么C++不要求你添加它们?

EDIT1:

你提到的例子当你不仅不需要它们中的一些时,而且你不想拥有它们,所以你想让它们成为私有或受保护的.但是你仍然需要在代码中编写它们,即使是空体.

当你通过添加一个带有空体的虚拟析构函数来创建一个类polimorphic时,我没有全部使用它们的唯一正当理由.但是只要你在析构函数体内写一些东西,就应该考虑在cctor的主体中写一些东西,并且op =.

我正在寻找一些例子,当你不需要编写所有3种方法时,即使新手正在使用你的类,你也可以省略其中的一些而不会在你的课程中造成错误.:)

tem*_*def 5

您可能希望在没有复制构造函数或赋值运算符的情况下使用析构函数的一种情况是在开发多态类时,在这种情况下,您希望virtual析构函数允许通过基类指针进行释放.这些类通常支持复制构造函数,以便于"虚拟克隆"习语.但是,它们很少有赋值运算符,因为多态类通常是堆分配的,只能通过指针引用,在这种情况下,直接赋值几乎总是会导致切片.


Pup*_*ppy 3

观察类(向另一个类报告其生命周期的类)需要所有构造函数和析构函数,但不需要 op=。C++ 不需要它们,因为它完全没有必要——我们程序员最了解。

此外,如果您有一个不可复制的类,您可能需要析构函数而不是其他两个。