C++ - 释放在main中分配但在单独的类中指向的内存

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对象时,我应该如何释放这个内存?

Oli*_*rth 6

这种复杂性是你应该尝试避免使用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)