Jea*_*ley 0 c++ memory-management
我想知道,如果我使用new关键字在main中创建一个对象,然后将该对象(指针)设置为由另一个类的成员指向,将原始指针设置为null,我将在哪里删除已分配的内存?我可以在第二个类的析构函数中做到这一点,但如果该对象没有动态分配怎么办?
一些代码作为例子:
World world;
Player* newPlayer = new Player("Ted");
world.setPlayer(newPlayer);
newPlayer = 0;
Run Code Online (Sandbox Code Playgroud)
所以现在World中的'player'成员变量指向newPlayer分配的内存,newPlayer指向null.当我完成World对象时,我应该如何释放这个内存?
这种复杂性是你应该尝试避免使用C++中的原始指针的原因. 存在智能指针来解决这类问题,并且省去了手动跟踪谁拥有对象的权限以及何时删除它的麻烦.
例如:
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!
Run Code Online (Sandbox Code Playgroud)