Boost 内存管理(smart_ptr库,pool库)

1. RAII机制为了管理内存等资源,C++程序员通常采用RAII机制(资源获取即初始化,Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请资源,然后使用,最后在析构函数中释放资源。 1. 在栈上创建对象(局部对象):RAII机制正常工作,当离开作用域时,对象会自动销毁从而调用析构函数释放资源 2. 在堆上创建对象,使用new操
摘要由CSDN通过智能技术生成

1. RAII机制

为了管理内存等资源,C++程序员通常采用RAII机制(资源获取即初始化,Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请资源,然后使用,最后在析构函数中释放资源。
1. 在栈上创建对象(局部对象):RAII机制正常工作,当离开作用域时,对象会自动销毁从而调用析构函数释放资源
2. 在堆上创建对象,使用new操作符,那么它的析构函数不会自动调用,只有对应的delete操作符销毁它才能释放资源。

2. 智能指针

STL中收录: #include <memory>
1. shared_ptr 允许多个指针指向同一个对象
2. unique_ptr 独占所指向的对象
3. weak_ptr 指向shared_ptr所指管理的对象,不控制对象生命周期。

2.1 shared_ptr, 工厂函数

引用计数型的智能指针,可以被自由的拷贝和赋值,在任意地方共享它,当没有代码使用(引用计数为0)时才删除被包装的动态分配的对象。
shared_ptr 很好的消除了显示的delete调用,完全可以不再使用delete。

//
shared_ptr<int> sp(new int(10));  //一个指向整数的shared_ptr
shared_ptr<int> sp2=sp;  //拷贝

//较复杂的用法
void print_func(shared_ptr<int> p)
{
    //do something
    cout<<p.use_count()<<endl;  //引用计数
}
//函数接受shared_ptr对象作为参数,特别注意的是,并没有使用引用的方式传递参数,而是直接拷贝,就像在使用原始指针,引用计数+1

最安全的分配和使用动态内存的方法是调用make_shared的标准库函数(工厂函数)

#include <memory>

shared_ptr<int
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值