我想知道,如果我在 main 中使用 new 关键字创建一个对象,然后将该对象(指针)设置为由另一个类的成员指向,将原始指针设置为 null,我将在哪里删除分配的内存?我可以在第二类的析构函数中执行此操作,但如果该对象不是动态分配的怎么办?
一些代码作为例子:
World world;
Player* newPlayer = new Player("Ted");
world.setPlayer(newPlayer);
newPlayer = 0;
所以现在World中的'player'成员变量指向newPlayer分配的内存,newPlayer指向null。当我使用完 World 对象后,我应该如何释放这 block 内存?
最佳答案
这种复杂性就是为什么你应该尽量避免在 C++ 中使用原始指针。 Smart pointers存在就是为了解决这类问题,让您免去手动跟踪谁拥有对象的所有权以及何时删除它的麻烦。
例如:
typedef boost::shared_ptr<Player> sp_Player;
struct World {
sp_Player player;
World(sp_Player p) : player(p) {}
};
sp_Player newPlayer = new Player("Ted");
World world;
world.setPlayer(newPlayer);
// Object is now automatically deleted at the correct time!
关于C++ - 释放在 main 中分配但在单独的类中指向的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449772/