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

Vector of pointers to possibly nonexistent objects

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

问题是,某些 B 对象可以删除,而 A 不知道。我知道我可以处理例外情况,但我宁愿避免它。

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

我可能会取消包装的想法,但如果有好的设计解决方案,那就太好了。

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

为活动对象创建地图,并且仅使用仍在地图中的值

您可以使用 std::unique_ptr,它会 return truefalseif() 语句中,具体取决于它是否已被删除:

// 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());
    }
}