BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #101870同步于 2022/4/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【问题】关于在类内如何使用智能指针

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