为什么std::weak_ptr没有move构造函数或move赋值操作符?
Why does std::weak_ptr not have a move constructor or move assignment operator?
查看boost 1.53的weak_ptr头文件,我惊讶地发现move赋值和move构造函数被实现了,尽管它们没有文档化。从本文档来看,std::weak_ptr不需要提供移动功能。
通过Visual Studio 2012的weak_ptr实现,我没有注意到在weak_ptr中声明任何明显的移动操作,尽管它们可能隐藏在继承之后。然而,这段代码导致监视窗口报告指针的一个共享引用和两个弱引用,这使我相信weak_ptr没有启用move:
std::shared_ptr<int> ptr(std::make_shared<int>(5));
std::weak_ptr<int> weakptr(ptr);
std::weak_ptr<int> movedWeakPtr(std::move(weakptr));
是否有很好的理由std::weak_ptr不提供移动功能?如果不是,应该将weak_ptr视为可移动类型吗?
每一个可复制的类型都是根据定义可移动的。weak_ptr
是可复制的,因此是可移动的。
weak_ptr
当然可以有一个移动构造函数。但这只是一个相对较小的优化。这可能是标准委员会的疏忽。
相关文章:
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- std::映射,只有move构造函数可用
- 为什么我的代码中没有调用move构造函数
- std::转换move构造函数的模板专业化的变体
- 如何调用move构造函数
- 我可以将 std::move 与不提供 move 构造函数的类一起使用吗?
- 为什么noexcept move构造函数在向量重新分配期间没有被调用
- 为什么在声明析构函数时必须声明 copy & move 构造函数?
- 如何在我自己的类 Vector 中使用 Move 构造函数而不是 Move 赋值运算符
- GoogleTest Move 构造函数覆盖率
- C - 构造函数,复制构造函数,MOVE构造函数,驱动器
- 如何在基类中调用 "move" '&&' 构造函数?在C++
- 如果我有一个向量(或类似的东西)成员变量,那么move构造函数看起来怎么样
- std::vector的move构造函数是否调用项的move构造器
- 为什么我们需要在move构造函数中将右值引用设置为null
- move构造函数在C++中调用了两次吗
- 实现move构造函数如何影响返回值优化
- 不能默认使用Move构造函数
- C++合成的move构造函数如何受到volatile和虚拟成员的影响