【发布时间】:2011-08-03 21:12:13
【问题描述】:
是否可以通过它们的基类将一堆对象存储在没有指针的 std::list 中。我真的很希望将对象保存在容器中,然后检索指向容器中对象的指针并将其动态转换为正确的派生类。
我使用指针可以正常工作。点赞(超简单版):
class IComponent
{
virtual ~Icomponent(){}
}
class PositionComponent: public IComponent
{
//...
float x, y;
}
std::list<IComponent*> CList;
//...
// fill the list
// put reference to object in pComponent
//...
PositionComponent* position = dynamic_cast<PositionComponent*>( pComponent)
position->x = 346452.235612;
但是内存管理是一个巨大的痛苦。我的实际结构是一个
map<enumValue, map<int, IComponent*> >
我觉得我不能使用对象本身,因为当我将任何派生组件添加到列表中时,额外的数据将被切断,只剩下基类。直到我尝试使用 static_cast 并且它崩溃时才知道这一点。
可以回答我最初的问题和/或确认我对此事的感受。谢谢!
【问题讨论】:
-
你有支持
std::unique_ptr的编译器和库吗?
标签: c++ casting pointer-container