sharedptr uniqueptr 互相转换 - 智学轩城

sharedptr uniqueptr 互相转换

由季顺头像

由季顺

2025-03-25 10:46:16

那是一个周末的午后,我正坐在咖啡馆里,旁边一个年轻程序员正在烦恼。他刚完成了一个项目,用的是 std::shared_ptr,但是项目需求突然变动,需要改为使用 std::unique_ptr。他的表情就像是在和自己的电脑搏斗。
“兄弟,你这是干嘛呢?”我放下手中的咖啡杯,好奇地问。
“我试试把 shared_ptr 转换为 unique_ptr 呢。”他苦笑着说,“可是我试了好多方法都不行。”
“?”我挑了挑眉,“那你有没有试试直接用 unique_ptr 的构造函数接受 shared_ptr 的原始指针呢?”
“啊,你怎么不早说!”他眼睛一亮,“我还以为只能反过来呢。”
我笑了笑,心里却想着,这小子是不是太年轻了?我还记得十年前,我第一次接触到这些智能指针时,也是这样一知半解。
“其实,很多问题都是因为我们只看到了表面。”我自言自语道,“比如说 shared_ptr 和 unique_ptr,它们之间的转换,其实只要换个思路,就会豁然开朗。”
等等,还有个事,我突然想到。如果是在 C++11 之前的版本,std::shared_ptr 和 std::unique_ptr 是不能直接转换的。但是在 C++11 之后,这种限制就取消了。
不过,这只是一部分答案。你知道为什么 C++11 会允许这样的转换吗?

薄仲荷头像

薄仲荷

2025-01-11 10:25:01

上周,2023年,我那个朋友问我,shared_ptr和unique_ptr之间能否互相转换。我告诉他,本质上,两者都是智能指针,但用法和场景不同。shared_ptr可以通过get()方法获取裸指针,然后通过unique_ptr的构造函数进行转换。反过来,unique_ptr不能直接转换成shared_ptr,但可以通过临时拷贝的方式间接转换。一言以蔽之,转换是有条件的,每个人情况不同,你看着办。我刚想到另一件事,转换时要注意内存管理,避免内存泄漏。算了。

绳仲祥头像

绳仲祥

2025-04-25 14:16:34

上周,我那个朋友问了我一个C++的问题,说是想弄清楚 shared_ptr 和 unique_ptr 之间的互相转换。2023年,我告诉他,本质上,两者之间是不能直接互相转换的。一言以蔽之,shared_ptr 指向的是共享所有权,而 unique_ptr 则是独占所有权。每个人情况不同,但是如果你有 shared_ptr,你只能通过转换成原始指针再转换回 unique_ptr,或者创建一个新的 shared_ptr 来拥有相同资源的 unique_ptr。不过,要注意的是,转换过程中可能会引发未定义行为,所以你得小心操作。我刚想到另一件事,如果你需要转换,最好先了解具体场景和需求,然后选择最合适的方法。你看着办吧。