指针向量可能不存在的对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针向量可能不存在的对象相关的知识,希望对你有一定的参考价值。
我有一个对象A
,我想用B
类型的对象列表(对象的指针)包装,A
应该处理。
问题是,一些B
对象可以删除,而A
不知道它。我知道我可以用异常处理它,但我宁愿避免它。
完整的问题:我正在编写C ++ SFML项目,我想用一个sf::RenderWindow
指向对象的向量包装一个sf::Drawable *
,该窗口应该绘制。问题是一样的。一些sf::Drawable
对象可能已被删除,但sf::RenderWindow
尝试使用它。
我可以取消包装的想法,但如果有一个好的设计解决方案,它会很棒。
答案
您可以使用std::unique_ptr,它将在true
语句中返回false
或if()
,具体取决于它是否已被删除:
// 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());
}
}
另一答案
您必须确保不重用内存,因为如果对象在您使用时不再存在,将导致未定义的行为。
为活动对象创建一个地图,如果它仍在地图中,则仅使用值
以上是关于指针向量可能不存在的对象的主要内容,如果未能解决你的问题,请参考以下文章