【发布时间】:2020-10-14 22:55:54
【问题描述】:
我在课堂上写过
class Game {
private:
mtm::Dimensions dimensions;
std::vector<Character*> board;
public:
explicit Game(int height, int width):dimensions(height,width), board(height*width){
}
~Game() {}
};
但是我应该如何释放我的向量,如果我将 d'tor 留空,我认为它会泄漏内存。
【问题讨论】:
-
这取决于
Character*的来源。如果它是用new分配的,那么是的,你必须delete它。 -
该向量将被自动销毁(因为它是一个成员),并且该向量负责销毁其元素,但我认为泄漏是元素指向的
Character对象。你真的需要向量中的指针吗? -
如果它们不必是指针,那么您可以使用
std::vector<Character>。如果必须如此,您可以使用std::vector<std::shared_ptr<Character>>... “拥有”他们) -
让你的
vector持有智能指针 -std::unique_ptr或std::shared_ptr而不是原始指针,那么当vector死亡时,矢量元素将自动死亡。或者只是将对象保存在向量中,而不是指向对象的指针。然后清理也是自动的。 -
在你做任何事情之前你需要determine who owns
board的元素指向的分配。