假设我有以下内容:
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/