我正在使用 a boost::ptr_vector
,但我相信这也适用于标准std::vector
。我正在尝试将指向对象的指针多态地放入boost::ptr_vector
层次结构中,因为我有一个Entity
继承自Object
使用该行创建的对象
Object * newObject = new Entity(param1, param2); // then I attempt to add it to the ptr_vector
但是如果我打破程序(Visual Studio 2010)来查看正在保存的内容,则指针永远不会从垃圾中重定向,并且垃圾正在被保存。我单步执行代码,它确实进入了参数化构造函数,并遵循正确的逻辑步骤。
我不确定出了什么问题。我是否需要在父级或子级中具有特定的成员函数才能使这种多态行为起作用(当前所有子级都具有其类型独有的参数化构造函数,以及析构函数以及多态交互方法)。我必须有赋值运算符,还是应该在Object
类中有构造函数。
似乎对运算符的调用new
不是解析为对象,而是解析为其他内容,但 VS2010 并没有引发错误。
编辑:解释应该发生的事情。
穿过 2D std::vector
(矩形/非锯齿状)
用于case/switch
确定要生成的对象,并添加到结构中
创建指向 Object 的指针,并分配给 new // 我认为这就是问题所在
然后将该指针的引用推送到管理器成员boost::ptr_vector
在 Visual Studio 2010 中,我在创建指针的行处放了一个断点,并分配新的(多态的)和一个用于观察指针的push_back()
行boost::ptr_vector
。临时指针值被创建,并进入构造函数,它遵循该构造函数的所有逻辑步骤,当构造函数完成时,堆栈返回到调用构造函数的行,指针仍然是相同的值(我认为这是可接受),但是当我查看它指向的对象时,所有值都显示为问号(包括静态组合的成员对象)。然后当推回触发并进入 boost-header 时,该x
值显示相同的信息。
似乎正在创建指针,并且创建了对象的数据,但是一旦构造函数完成,它实际上并没有将值分配给父类对象,这对于多态行为应该相当简单。
关注的示例标头(真正的标头确实具有成员变量,并且它们的实现位于单独的 cpp 文件中):
class Object{
public :
virtual void interact(int action, Object& source){}
virtual void updateObject(float duration){}
virtual ~Object(){}
bool operator==(const Object& _other)const;
bool operator!=(const Object& _other)const;
};
class Entity : public Object{
public:
Entity(Vector3 location, Type thisType, SpecialType difficulty=noSpecial);
~Entity();
void interact(int action, Object& source);
void updateObject(float duration);
};
编辑:更改上下文以更好地解决手头的问题,并获得解决方案