我有一个对象 A
,我想用 B
类型的对象(指向对象的指针)列表来包装该对象,即 A
> 应该处理。
问题是,一些B
对象可以被删除,而A
不知道这一点。我知道我可以处理异常(exception)情况,但我宁愿避免它。
完整问题:我正在编写 C++ SFML 项目,我想用指向对象的 sf::Drawable *
指针 vector 包装 sf::RenderWindow
,该窗口应该绘制。问题是一样的。一些 sf::Drawable
对象可能已被删除,但 sf::RenderWindow
尝试使用它。
我可能会取消包装的想法,但如果有一个好的设计解决方案,那就太好了。
最佳答案
您可以使用 std::unique_ptr它将在 if()
语句中返回 true
或 false
,具体取决于它是否已被删除:
// 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/