为什么有T::T(T&)
更适合T::T(const T&)
的地方copy
?
(可能是用来实现move
语义的??
原始描述({{1}证明是错误的):
在melpomene
中,支持一种新形式的副本构造函数C++11
(来自cppreferene/Copy constructor Implicitly declared copy constructor)
我想知道它的实际用途是什么?
答案 0 :(得分:5)
T(T&)
在C ++ 11中不是新增功能。新功能是使用default
关键字来显式定义自动生成的副本构造函数:
T(const T &) = default;
如您的链接所述:
一个类可以具有多个副本构造函数,例如
T::T(const T&)
和T::T(T&)
。如果存在一些用户定义的副本构造函数,则用户仍可以使用关键字default
强制生成隐式声明的副本构造函数。
在C ++ 11之前,如果您的类中有一个T(T&)
构造函数,它将阻止自动创建T(const T&)
(默认的复制构造函数)。从C ++ 11开始,您可以同时拥有(用户定义的T(T&)
构造函数和自动T(const T&)
构造函数)。
对于非常量复制构造函数的用途,答案是“不多”。这样可以确保只能复制可变对象(而不是临时对象),而这通常不是您需要的。
(可能是用来实现移动语义的??)
完全正确。参见例如auto_ptr
(现已从C ++标准中删除),它与unique_ptr
类似,但我们没有转移语义。特别是,它有一个auto_ptr(auto_ptr &r)
constructor可以修改r
(这会导致一些不直观的行为,这就是为什么将其从语言中删除的原因。)