gpt4 book ai didi

c++ - 传递给方法时,我应该将 shared_ptr 转换为 weak_ptr 吗?

转载 作者:可可西里 更新时间:2023-11-01 17:29:37 27 4
gpt4 key购买 nike

关于这个主题已经有几个问题,但我仍然不确定该怎么做:我们的代码库在很多地方使用 shared_ptr。不得不承认,我们在写的时候并没有明确定义所有权。

我们有一些方法,比如

 void doSomething(shared_ptr<MyClass> ptr)
{
//doSomething() is a member function of a class, but usually won't store the ptr
ptr->foo();
...
}

在发现第一个(间接的)循环依赖后,我想纠正我们设计中的错误。但我不确定如何。将上面的方法更改为

有什么好处吗?
 void doSomething(weak_ptr<MyClass> ptr)
{
shared_ptr<MyClass> ptrShared = ptr.lock();
ptrShared->foo();
...
}

?

我也很困惑,因为有些人说(包括 Google 样式指南)首先正确获得所有权很重要(这可能意味着引入许多 weak_ptrs,例如在示例中使用上述方法,但也适用于我们拥有的许多成员变量)。其他人说(请参阅下面的链接)您应该使用 weak_ptr 来打破循环依赖。然而,检测它们并不总是那么容易,所以我想知道我是否真的应该使用 shared_ptr 直到我遇到问题(并意识到它们),然后修复它们?

谢谢你的想法!

另见

最佳答案

We did not define ownership clearly.

您需要明确定义谁拥有什么。没有其他方法可以解决这个问题。随意将 shared_ptr 的某些用途替换为 weak_ptr 不会让事情变得更好。

关于c++ - 传递给方法时,我应该将 shared_ptr 转换为 weak_ptr 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408050/

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