如何在C ++中移动指针?

时间:2012-03-08 22:16:17

标签: c++

这是一个愚蠢的问题,但我根本不知道如何做到这一点。

我有一个对象和一个向量。在执行期间的设定时间,我需要将此对象放在向量中并使用新对象覆盖此对象。我现在有这个,

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

我认为这是因为一些与指针相关的原因。我不知道如何正确地做到这一点。

2 个答案:

答案 0 :(得分:10)

如果我们避免使用指针和明确的动态分配,它会更加清晰并且更不容易泄漏:

std::vector<Cube> cubes;

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

如果复制费用Cube但移动费用便宜,则可以std::move(workingCube)进入容器。如果Cube移动和复制都很昂贵,请使用std::unique_ptr<Cube>并将其移至容器中。

无论你做什么,都不要使用原始指针来拥有东西

答案 1 :(得分:1)

这没有任何问题,只要你总是记住哪个指针“拥有”对象,即谁不再需要对delete对象负责。在你的情况下,你将拥有指针传递给向量,在某些时候,你应该删除向量中的所有指针。