【发布时间】:2012-10-22 22:03:29
【问题描述】:
我在几个地方看到过这样的建议:要么定义你自己的赋值运算符/复制构造函数,要么通过将它们声明为私有来阻止默认值。
然而,我能找到的唯一危险是创建指针副本的问题,这些副本以后可能是悬空指针。
在现代 C++ 中指针很少见,大多数类只使用智能指针(例如来自 boost 或来自 C++11 中的 std 库)。对于没有原始指针的类,是否还需要声明赋值运算符和复制构造函数?
主要是:不这样做有什么危险?会发生什么样的意外行为?
【问题讨论】:
-
您需要定义自己的赋值运算符或复制构造函数的唯一时间是在定义析构函数的同时。这是Rule of Three。但是,如果您只使用资源管理类而不创建一个,则不需要做任何特别的事情,因为为您的类隐式生成的特殊函数将使用资源管理类中专门编写的函数,这应该只是正确的事情。
标签: c++ operator-overloading smart-pointers copy-constructor