gpt4 book ai didi

c++ - boost ,shared_ptr 与 weak_ptr?什么时候用?

转载 作者:IT老高 更新时间:2023-10-28 14:00:38 24 4
gpt4 key购买 nike

在我当前的项目中,我非常广泛地使用 boost::shared_ptr

最近我的队友也开始使用weak_ptr。我不知道该使用哪一个以及何时使用。

除此之外,如果我想将weak_ptr 转换为shared_ptr 应该怎么做。锁定 weak_ptr 以创建 shared_ptr 会影响我在其他线程中的代码吗?

最佳答案

总的来说和总结,

强指针保证它们自己的有效性。例如,在以下情况下使用它们:

  • 您拥有被指向的对象;你创建它并销毁它
  • 如果对象不存在,您没有定义的行为
  • 您需要强制该对象存在。

弱指针保证知道它们自己的有效性。例如,在以下情况下使用它们:

  • 您可以访问它,但它不是您的。
  • 如果对象不存在,您已定义行为

弱指针上的Lock()返回一个强指针;这就是您访问弱指针的方式。如果对象不再有效(它已被删除等),那么强指针将为 NULL,否则,它将指向该对象。你需要检查一下。

它是这样设置的,因此您在使用它时不会意外删除该对象,因为您已经创建了一个临时(本地)强指针,因此在该强指针保留时保证了该对象的存在。当您使用完对象后,通常会让强指针超出范围(或重新分配它),然后允许删除该对象。对于多线程,请像对待其他没有内置线程安全的东西一样小心对待它们,注意我上面提到的保证在多线程时成立。 AFAIK 过去他们没有做任何特别的事情。

boost 共享指针还具有类似垃圾收集器的功能,因为当指向对象的最后一个强指针消失或指向其他地方时,该对象将被删除。

还有其他答案中提到的性能和循环依赖。

从根本上说,boost 共享指针库可以让您不会弄乱组合程序,但它不能替代花时间正确设计指针、对象所有权和生命周期。如果您有这样的设计,您可以使用该库来强制执行它。如果您没有这样的设计,您可能会遇到与以前不同的问题。

关于c++ - boost ,shared_ptr 与 weak_ptr?什么时候用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com