gpt4 book ai didi

c++ - 使用 shared_ptr 时,我应该只使用一次 shared_ptr 声明还是在我传递它的所有地方都声明 shared_ptr?

转载 作者:可可西里 更新时间:2023-11-01 18:37:12 28 4
gpt4 key购买 nike

使用 shared_ptr 时,我应该只使用 shared_ptr 吗?申报一次或申报shared_ptr无论我经过哪里?

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

所以我的问题是,我应该只使用 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?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152046/

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