您的位置:首页 > 编程语言 > C语言/C++

C++内存泄露

2016-03-16 18:13 417 查看

1. boost::any 保存原始指针

boost基础——any

int* p = new int(10);
// 应该用 shared_ptr<int> p(new int(10));
boost::any a = p;
// 危险,会造成内存泄露


any 的析构函数会删除内部的 holder 对象(any 是包装类),如果类型是指针,any 并不会对指针执行 delete 操作,因此,如果用 any 保存原始指针(raw pointer)会造成内存泄露,替代方案是使用智能指针来存入 any 容器。

2. 单例类

class Singleton
{
public:
static Singleton* instance()
{
if (!_instance)
_instance = new Singleton;
// 危险,会造成内存泄露,应使用智能指针对原始指针封装
return _instance;
}
private:
Singleton() {}
static Singleton* _instance;
};


解决方案见:utilities(C++)——单例(Singleton) (使用智能指针 shared_ptr)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: