2012-03-08 162 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

只要您始终记住哪个指针“拥有”了该对象,即该对象在不再需要时负责对象,那没有什么不对。在你的情况下,你将拥有指针传递给向量,并且在某些时候,你应该删除向量中的所有指针。