如果我的理解是正确的,下面的声明都应该调用T的复制构造函数,它将x的类型作为参数。
T
x
T t = x; T t(x);
但是,当我对std::unique_ptr<int>执行相同的操作时,第一个声明会出现错误,而第二个声明会编译并执行预期的操作。
std::unique_ptr<int>
std::unique_ptr<int> x = new int(); std::unique_ptr<int> x (new int());
调用复制构造函数的两种语法有什么区别吗?
u5rb5r591#
std::unique_ptr<>的构造函数是explicit,这意味着,在第一种情况下需要编写它:
std::unique_ptr<>
explicit
std::unique_ptr<int> x = std::unique_ptr<int>(new int()); // or auto x = std::unique_ptr<int>(new int()); // or make_unique()
laik7k3q2#
std::unique_ptr::unique_ptr( pointer p )是显式构造函数,因此不允许使用这种形式得初始化.使用=进行初始化始终需要converting-constructor进行隐式转换.
std::unique_ptr::unique_ptr( pointer p )
=
2条答案
按热度按时间u5rb5r591#
std::unique_ptr<>
的构造函数是explicit
,这意味着,在第一种情况下需要编写它:laik7k3q2#
std::unique_ptr::unique_ptr( pointer p )
是显式构造函数,因此不允许使用这种形式得初始化.使用=
进行初始化始终需要converting-constructor进行隐式转换.