12.1 动态内存与智能指针(1)

本文探讨了C++中智能指针的使用方法及其与内存管理的关系,包括shared_ptr的基本操作、构造及如何避免内存泄漏等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//练习12.10-11 
shared_ptr<int> p(new int(42));
//process(p);
//process(shared_ptr<int>(p)); //用p来初始化创建一个临时的智能指针
                             //也指向p所指向的内存 
process(shared_ptr<int>(p.get())); //用p.get()返回的内置指针来初始化创建一个
                                   //临时的智能指针,指向p所指向的内存
                                   //当离开process函数的作用域时,这个临时智能指针会被销毁
                                   //其所指向的内存也被释放掉
                                   //因为调用结束后指向这块内存的智能指针数为0 
                                   //导致再次使用这块内存时会得到未定义的结果 
int i = *p; cout << i;

//练习12.11的函数
void process(shared_ptr<int> ptr)
{
  //Do Something...
}
//练习12.12
auto p = new int();
auto sp = make_shared<int>();
process(sp); //正确
//process(new int()); //错误,传入的是一个局部临时int*内置指针
//process(p); //错误,传入的是一个int*内置指针
process(shared_ptr<int>(p)); //正确,将int*指针强制类型转换为智能指针
                             //并传入一个临时局部的智能指针
                             //函数调用返回时这个局部指针会被销毁 
                             //计数变为0
                             //其指向的空间也将会被自动释放 
//练习12.13
auto sp = make_shared<int>(42);
auto p = sp.get();
delete p; //没有释放其所指向的内存
          //因为仍有智能指针sp指向这块内存
          //计数为1
cout << sp.use_count() << endl; 
cout << *sp << " " << *p;

切忌混用智能指针和内置指针,特别是用内置指针初始化智能指针,即

int *p = new int(42);
shared_ptr<int> sp(p);

  

转载于:https://www.cnblogs.com/ChenZhongzhou/p/5352770.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值