c – 当使用shared_ptr时,我应该只使用一次shared_ptr声明,还是在我传递的地方声明shared_ptr?

c – 当使用shared_ptr时,我应该只使用一次shared_ptr声明,还是在我传递的地方声明shared_ptr?,第1张

概述当使用shared_ptr时,我应该只使用一次shared_ptr声明,还是在我传递地方声明shared_ptr? 所以在我新建实例的函数中,我将它包装在shared_ptr中,但是当我从函数返回它时,我也可以返回一个shared_ptr,或者使用shared_ptr上的get(),只返回一个普通的指针. 所以我的问题是,我应该使用shared_ptr< myType>当我新建实例然后传递普通指 当使用shared_ptr时,我应该只使用一次shared_ptr声明,还是在我传递的地方声明shared_ptr?

所以在我新建实例的函数中,我将它包装在shared_ptr中,但是当我从函数返回它时,我也可以返回一个shared_ptr,或者使用shared_ptr上的get(),只返回一个普通的指针.

所以我的问题是,我应该使用shared_ptr< myType>当我新建实例然后传递普通指针或者我应该传递shared_ptr< myType>到处?

解决方法 创建一个shared_ptr并不会给它的指针对象带来神奇的力量.神奇的是所有在shared_ptr – 及其副本 – 本身.如果您停止使用它,则会丢失引用计数;更糟糕的是,因为您在某些时候使用它,所以当您不期望它时,该对象将被自动删除.

拥有shared_ptr的重点在于,当你仍在某处使用它时,你知道你的对象不会被破坏.

在下面的:

T* foo() {   shared_ptr<T> sp(new T());   return sp.get();   // ^ the only shared_ptr<T> referencing the obj is dead;   // obj is deleted;   // returned pointer invalID before you can even do anything with it}

你的指针立即无效.

在某种情况下,您可能会提取原始指针,但这些应该很少见.如果您处于一个您不需要引用计数的函数中,那么只需通过引用传递shared_ptr.

总结

以上是内存溢出为你收集整理的c – 当使用shared_ptr时,我应该只使用一次shared_ptr声明,还是在我传递的地方声明shared_ptr?全部内容,希望文章能够帮你解决c – 当使用shared_ptr时,我应该只使用一次shared_ptr声明,还是在我传递的地方声明shared_ptr?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存