指针向量可能不存在的对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针向量可能不存在的对象相关的知识,希望对你有一定的参考价值。

我有一个对象A,我想用B类型的对象列表(对象的指针)包装,A应该处理。

问题是,一些B对象可以删除,而A不知道它。我知道我可以用异常处理它,但我宁愿避免它。

完整的问题:我正在编写C ++ SFML项目,我想用一个sf::RenderWindow指向对象的向量包装一个sf::Drawable *,该窗口应该绘制。问题是一样的。一些sf::Drawable对象可能已被删除,但sf::RenderWindow尝试使用它。

我可以取消包装的想法,但如果有一个好的设计解决方案,它会很棒。

答案

您可以使用std::unique_ptr,它将在true语句中返回falseif(),具体取决于它是否已被删除:

// use a std::unique_ptr that will record if its target has been deleted
std::vector<std::unique_ptr<sf::Drawable>> drawables;

// deleting an element

for(auto& drawable: drawables)
{
    if(needs_to_be_deleted(drawable.get()))
        drawable.reset(); // deletes object
}

// process elements

for(auto& drawable: drawables)
{
    if(drawable) // returns false if element is deleted
    {
        // pass by reference or pointer (using get())
        do_something_with_drawable(drawable.get());
    }
}
另一答案

您必须确保不重用内存,因为如果对象在您使用时不再存在,将导致未定义的行为。

为活动对象创建一个地图,如果它仍在地图中,则仅使用值

以上是关于指针向量可能不存在的对象的主要内容,如果未能解决你的问题,请参考以下文章

用向量 c++ 中的指针成员初始化对象

如果指针对象不存在或指针未定义,总是获取指针值?

我可以直接从 C++ 中向量元素的指针获取索引吗?

向量返回 const 引用,不可能向下转换

根据额外参数对向量进行排序

C++ OOP,输出对象指针向量时的空白控制台,不确定填充向量是不是正确