我正在使用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