2012-03-08 166 views
1

這是一個愚蠢的問題,但我不知道如何做到這一點。如何在C++中移動指針?

我有一個對象和一個向量。在執行期間的一個設定時間,我需要把這個對象放在向量中,並用新的覆蓋這個對象。我目前有,

std::vector<Cube*> cubes; 
Cube* workingCube = new Cube(); 
... 
cubes.insert(cubes.begin(), workingCube); 
workingCube = new Cube(); 

我認爲是錯誤的,因爲一些指針相關的原因。我無法弄清楚如何正確地做到這一點。

+0

您可以使用放置新的,但這是不好的設計。也許智能指針可以解決潛在的問題。 – BatchyX 2012-03-08 22:19:16

+0

@CarlNorum我的部分錯別字,修復它 – Valyrion 2012-03-08 22:20:37

+0

@BatchyX:我看不出新的位置是如何與問題相關的。 – 2012-03-08 22:48:33

回答

10

這是一個很大清潔,遠不如泄漏容易,如果我們要避免指針和明確的動態分配:

std::vector<Cube> cubes; 

Cube workingCube; 
cubes.insert(cubes.begin(), workingCube); 
workingCube = Cube(); 

如果Cube是將昂貴的複製,但價格便宜,你可以std::move(workingCube)入容器代替。如果Cube對移動和複製都很昂貴,請使用std::unique_ptr<Cube>並將其移入容器中。

無論你做什麼,不要使用原始指針來擁有東西

1

只要您始終記住哪個指針「擁有」了該對象,即該對象在不再需要時負責對象,那沒有什麼不對。在你的情況下,你將擁有指針傳遞給向量,並且在某些時候,你應該刪除向量中的所有指針。