2012-03-28 35 views
0

如何正確地將引用轉換爲指針?如何正確地將引用轉換爲指針?

下面的代碼給了我下面的警告:「取得臨時地址」。

MyClass myclass; 

vector<MyClass*> myClassList; 

myClassList.push_back(&myclass); 

MethodThatsNeedsVectorOFMyClassPointers(myClassList); 
+1

嗯,不,他的代碼沒有給出警告。 – 2012-03-28 08:58:18

+0

爲什麼你需要存儲一個指針而不是僅僅使用引用? – Matt 2012-03-28 08:58:42

+1

這段代碼對我來說看起來不錯,除非你在'myClass'被銷燬後嘗試使用vector。 – Naveen 2012-03-28 08:59:58

回答

3

你的代碼看起來像現在的方式,因爲myclassmyClassList有相同的壽命你不應該得到一個警告。但是,如果myClassList會超越myclass,你需要動態分配MyClass

vector<MyClass*> myClassList; 
{ 
    MyClass* myclass = new MyClass; 
    myClassList.push_back(myclass); 
} 

如果下面是更接近你實際有:

vector<MyClass*> myClassList; 
{ 
    MyClass myclass; 
    myClassList.push_back(&myclass); 
} 

然後myclass處於閉合}破壞,myClassList將包含釋放內存的指針。

另外,是MyClass多態?你真的需要在向量中存儲指針嗎?

+2

代碼中的矢量與「myclass」一樣長。 – 2012-03-28 09:00:45

+0

@ R.MartinhoFernandes因爲他得到了警告,我猜這不是他的實際代碼 - 請參閱'MethodThatsNeedsVectorOFMyClassPointers'。 – 2012-03-28 09:01:32

+0

你猜測「現在的方式(OP)」的警告是正確的?很好,這解釋了警告。但是你也猜測他實際上需要動態分配,而不僅僅是'vector '或者其他一些選擇。 – 2012-03-28 09:30:18

相關問題