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

标签 c++ memory-management

我想知道,如果我在 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/

相关文章:

c++ - g++ 不显示 'unused' 警告

c++ - 错误 : 'cout' : undeclared identifier; though I've included iostream header file in program

c++ - 函数返回结构 vector 的拷贝

c++ lambda,无法访问拷贝捕获的变量

android - 分配跟踪器或堆分析器可以帮助跟踪 'bitmap size exceeds VM budget' 错误吗?

c++ - 清除和删除多精度变量

winapi - 大地址感知标志如何在 64 位计算机上用于 32 位应用程序?

c++ - 将 unsigned int 转换为字节数组并返回

python - 如何在python中释放内存?

使用底层内存池的 C++ 自定义分配器