返回信息流1.如图在类内定义了一个private的unique_ptr,如何编写函数返回这个指针。
因为unique_ptr禁止拷贝,因此无法直接返回。我自己尝试写出了图中的返回函数,但是担心直接调用up的release函数会有潜在的风险。
2.如何通过构造函数或者set函数为unique_ptr赋值,因为unique_ptr禁止拷贝,所以直接传递unique_ptr会报错。不知有没有什么好的方法。
大一学生,如果有说的不对的,希望不吝赐教。
这是一条镜像帖。来源:北邮人论坛 / cpp / #101870同步于 2022/4/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【问题】关于在类内如何使用智能指针
jkc
2022/4/26镜像同步18 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
1. 记得应该可以直接返回的,可以查下RVO优化,如果返回值用来初始化另一个unique ptr,编译器优化完调用的其实是移动构造函数而非拷贝
2. 实现移动语义,即test增加一个test(unique ptr&&)构造函数,调用如test t(std::move(某个unique ptr)),可以参考vector<unique ptr>如何增加元素的。
1.unique_ptr在函数内可以以临时对象的形式返回 lz的写法也可以 没啥问题
2.增加接受unique_ptr的右值引用 的set方法或者增加接受unique_ptr右值引用的test构造函数 unique_ptr虽然不接受拷贝构造和赋值 但接受移动构造和移动赋值 至于使用值传递的set方法 可以传入new好的裸指针 然后调用unique_ptr的reset方法
【 在 jkc 的大作中提到: 】
: [upload=1][/upload]
: 1.如图在类内定义了一个private的unique_ptr,如何编写函数返回这个指针。
: 因为unique_ptr禁止拷贝,因此无法直接返回。我自己尝试写出了图中的返回函数,但是担心直接调用up的release函数会有潜在的风险。
: ............
多谢指教
【 在 tenno (tenno) 的大作中提到: 】
: 1.unique_ptr在函数内可以以临时对象的形式返回 lz的写法也可以 没啥问题
: 2.增加接受unique_ptr的右值引用 的set方法或者增加接受unique_ptr右值引用的test构造函数 unique_ptr虽然不接受拷贝构造和赋值 但接受移动构造和移动赋值 至于使用值传递的set方法 可以传入new好的裸指针 然后调用unique_ptr的reset方法
谢谢
【 在 silicat (silicat) 的大作中提到: 】
: 1. 记得应该可以直接返回的,可以查下RVO优化,如果返回值用来初始化另一个unique ptr,编译器优化完调用的其实是移动构造函数而非拷贝
: 2. 实现移动语义,即test增加一个test(unique ptr&&)构造函数,调用如test t(std::move(某个unique ptr)),可以参考vector<unique ptr>如何增加元素的。
c艹primer里说尽量不要混用智能指针和内置类型指针,所以我是想返回智能指针。
【 在 toobee () 的大作中提到: 】
: get返回裸指针就完了啊,