显式关键字、移动构造函数和复制构造函数以及禁用移动和复制构造函数
Explicit keyword, move constructor and copy constructor, and disabling move and copy constructor
我理解 explicit 关键字对具有单个参数的构造函数的作用,它肯定可以限制不需要的行为的可能性。我也明白移动和复制构造函数的作用。
我不明白的是,显式构造函数如何影响移动和复制构造函数,而且我还看到过可以禁用复制和移动构造函数的情况……你为什么要这么做?所有这些对我来说都很模糊。
显式复制构造函数与显式转换构造函数的工作方式相同——它不能被隐式调用。唯一的区别是你的对象是由什么构成的。
我也认为这方面的用例极为罕见。
稍微更常见的情况是删除 class' 复制构造函数和赋值运算符 (= delete
)。这对于代表唯一资源的对象很有用,因此不应复制。 std::cout
是存在但不应复制的对象的示例。
我理解 explicit 关键字对具有单个参数的构造函数的作用,它肯定可以限制不需要的行为的可能性。我也明白移动和复制构造函数的作用。
我不明白的是,显式构造函数如何影响移动和复制构造函数,而且我还看到过可以禁用复制和移动构造函数的情况……你为什么要这么做?所有这些对我来说都很模糊。
显式复制构造函数与显式转换构造函数的工作方式相同——它不能被隐式调用。唯一的区别是你的对象是由什么构成的。
我也认为这方面的用例极为罕见。
稍微更常见的情况是删除 class' 复制构造函数和赋值运算符 (= delete
)。这对于代表唯一资源的对象很有用,因此不应复制。 std::cout
是存在但不应复制的对象的示例。