我正在使用boost::ptr_vector
,但我相信这也适用于标准std::vector
以及。我试图把对象的指针polymophically成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
来确定对象
要产生,并添加创建构建
指针到对象,并分配给新//我步进认为这是哪里的问题是发生
然后该指针的基准在Visual梭哈被推到一个管理器部件boost::ptr_vector
io 2010我在线上创建了一个中断来创建指针,并分配新的(多态),并且在push_back()
到boost::ptr_vector
之间的线上注视着指针。 temp指针的值被创建,并且进入构造函数,它遵循构造函数的所有逻辑步骤,当构造函数完成时,并且栈返回到调用构造函数的那一行,指针仍然是相同的值(我认为这是可接受的),但是当我查看它指向的所有值显示为问号(包括静态组成的对象)的对象时。那么当回推触发,并进入升压头时,x
值显示相同的信息。
它几乎看起来像指针正在创建,并且该对象的数据都被创建,但是一旦构造函数完成,它实际上不会将值分配给父类对象,这应该相当简单polyphophic行为。
例如关注的标题(真正的头确实有成员变量,它们的实现是在一个单独的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);
};
编辑:手头不断变化的环境,以更好的目标问题,收到一个解决方案
你能告诉我们你是如何填充向量吗? – Naveen 2012-04-25 16:41:58
@naveen我不认为它有什么关系填充矢量,但实际上获取正在构建的对象,并首先分配给指针 – gardian06 2012-04-25 17:55:01
这可能是一个愚蠢的问题,但以防万一......您正在调试非优化的调试版本,对吗?因为在发布版本中,编译器很可能会跳过所有中间副本,并将指针留在某个寄存器中,而不是将其存储在内存中的任何位置,直到该向量的存储为止。调试器_could_通过显示该寄存器的内容来处理该事件,无论何时您尝试查看newObject,x等,但它可以通过显示这些指针的垃圾或拒绝显示任何内容来轻松处理它。 – abarnert 2012-04-27 22:18:38