gpt4 book ai didi

c++ - 删除 std::shared_ptr 的条件

转载 作者:行者123 更新时间:2023-11-27 23:04:04 25 4
gpt4 key购买 nike

假设我有以下内容:

class Bar
{
public:
int i;
};

class Foo
{
public:
std::vector<std::shared_ptr<Bar>> vector;
};

class FooBar
{
public:
std::shared_ptr<Bar> myBar;
};

int main()
{
Foo foo;
FooBar foobar;

foobar.myBar = std::make_shared<Bar>();

foo.vector.push_back(foobar.myBar);

foobar.myBar = nullptr;
}

myBar 和 foo.vector.back() 是否都等于 nullptr?两个都删了吗?这样做的正确方法是什么?我的最终目标是能够拥有一个指向对象的指针 vector ,构造对象并将它们从不同的范围放入该 vector 中,然后在它们创建的范围内删除它们并将它们从 vector 中删除。我的想法是,如果我能以某种方式轻松删除指针的所有实例,那么我只需检查每一帧,从 vector 中删除 shared_ptr(如果它等于 nullptr)。

最佳答案

当您push_back 时,您对插入的内容进行了复制,在本例中为shared_ptr。所以不,对象没有被删除,因为 shared_ptr 的拷贝仍然存在;只要任何 shared_ptr 仍指向该对象,它就会保持事件状态。

我想你要找的是 weak_ptr .如果您从 vector 中提取其中一个,您需要先将其转换为 shared_ptr,然后才能使用它,如果转换失败,您就会知道该对象已被删除。

关于c++ - 删除 std::shared_ptr 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24813051/

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