解引用右值引用是否有作用?std::unique_ptr资源释放疑问
std::unique_ptr解引用时std::move的作用分析
去掉std::move是否有区别?
完全没有区别。std::move(ptr)只是把ptr转换成右值引用类型,但解引用操作*不管操作的是左值的std::unique_ptr还是它的右值引用,最终都是获取指针指向的int对象的引用。不管写*ptr还是*std::move(ptr),val都会被赋值为10,ptr也依然持有原来的内存资源,状态没有任何变化。
能否实现val赋值后释放ptr的资源?
这段代码做不到。因为解引用操作不会触发std::unique_ptr的资源转移或释放逻辑,ptr在赋值后仍然牢牢握着那块堆内存的所有权。如果想让资源在赋值后释放,你得主动让ptr放弃所有权——比如调用ptr.reset(),或者把ptr移动到另一个即将销毁的std::unique_ptr实例里,或者直接让ptr离开当前作用域(比如把这段代码放到一个独立代码块中)。
内容的提问来源于stack exchange,提问作者Patrick M
相关产品推荐
相关产品推荐

