gpt4 book ai didi

c++ - 处理可能不指向任何东西的指针

转载 作者:太空狗 更新时间:2023-10-29 23:54:13 27 4
gpt4 key购买 nike

我在管理器中保存了一组指向其基类的指针 vector 中的对象:

std::vector<object*> objectVec;

类可能希望使用管理器中的 Add() 方法生成这些对象之一。问题是他们随后需要自己设置或更新这些对象。我决定让 Add() 返回一个指向对象本身的指针,它存储在任何决定生成一个的类中。问题是处理指针后面的对象可能已被删除的情况。

添加看起来像这样:

object* ObjectManager::Add(object* obj)
{
objectVec.push_back(obj);
return objectVec.back();
}

并像这样使用:

objectptr = ObjectManager::OMan()->Add(new object());

其中 objectptr 是调用该函数的任何类的成员。因此,如果该特定对象被删除,则 Add 返回的指针将指向垃圾。

如果这个对象被删除,我有责任确保 whateverclass::objectptr 总是设置为 NULL 吗?或者这可以使用某种智能指针来处理吗?问题是我不需要使用智能指针来处理内存泄漏的可能性,而是处理存储指针已失效的情况。

如果我不清楚,或者问题格式不正确,请告诉我。

如有任何帮助,我们将不胜感激。

最佳答案

是的,您可以在 vector 中存储智能指针而不是原始指针。在这种情况下,如果有人释放了一个对象,它不会被删除,直到最后一个引用没有被释放(在你的例子中是在 vector 中保存的)。您可以使用 boost::shared_ptrstd::shared_ptr (C++11)。

如果这不是您想要的,您可以使用 boost::weak_ptr 在您的 vector 中存储引用。 weak_ptr 不会增加引用计数器,因此如果有人释放了一个对象,它就会被删除,但是存储在 vector 中的引用 (weak_ptr) 允许您检查这一点。

关于c++ - 处理可能不指向任何东西的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7323096/

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