c++ - 指向可能不存在的对象的指针 vector

标签 c++ pointers stdvector

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

问题是,一些B对象可以被删除,而A不知道这一点。我知道我可以处理异常(exception)情况,但我宁愿避免它。

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

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

最佳答案

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

// 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++ - 指向可能不存在的对象的指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982365/

相关文章:

c - 添加时 Struct 的地址不一致

c++ - 从 vector 中提取成员变量的数组

c++ - 为什么在 C++ 中找不到 vector

c++ - 如何在C++中将输入正确读取为2D vector vector <vector <int >>

C++ - 在大文本中搜索重复的字符串

c++ - 混合 C++ 类继承和初始化列表。我心中的未解之谜

c++ - 如何使用 Tab 键在 TextEdit 框之间更改焦点

c - 指向函数原型(prototype)的指针

c++ - SDL RenderTextShaded 透明背景

c++ - 复制构造函数遍历链表。执行