T :: T(T&)的用途是什么?

时间:2018-09-29 07:25:58

标签: c++ constructor

为什么有T::T(T&)更适合T::T(const T&)的地方copy

(可能是用来实现move语义的??

原始描述({{1}证明是错误的):

melpomene中,支持一种新形式的副本构造函数C++11 (来自cppreferene/Copy constructor Implicitly declared copy constructor) 我想知道它的实际用途是什么?

1 个答案:

答案 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(这会导致一些不直观的行为,这就是为什么将其从语言中删除的原因。)