Smart point智能指针(part.1)
创始人
2024-01-31 17:28:40
0

1:为什么出现智能指针
  为了避免多个指针指向一个对象的时候 销毁其中一个point 其他的point就会变成空point 或者多次删除被指向对象而发生报错
  或者单纯删除指针 不删除其指向的对象 当最后一个指向对象被删除的时候 对象依然存在 造成资源泄露
 智能指针就是为了解决上述问题而存在的
2:智能指针的类型
智能指针有两大类型(C++11的语法)
  Class shared_ptr多个智能指针可以指向同一个对象 当最后一个智能指针被销毁的时候 该对象和相关资源会被释放
  unique_ptr实现独占或者严格拥有的概念 保证同一时间内只有一个指针指向其对象,可以移交拥有权 对于因为new而创建的对象因为发生异常而忘记 调用delete很有用
注意:auto_ptr是为了辅助unique_ptr而存在的指针 不容易理解且容易出错 C++11不推荐使用 除非还有旧的代码需要维护
所有的smart指针都被定义在中
3:智能指针的使用
shared_ptr一般不用担心资源的释放

#include
#include
#include
#includeusing namespace std;int main()
{//shared_ptr PNico(new string("nico"));std::shared_ptr PNico(new string("nico"), [](string* p) {cout << " delete : " << *p << endl;delete p;});std::shared_ptr PJutta(new string("jutta"));(*PNico)[0] = 'N';PJutta->replace(0, 1, "J");//把这两个智能指针多次插入对象中vector> Coffee;Coffee.push_back(PJutta);Coffee.push_back(PJutta);Coffee.push_back(PNico);Coffee.push_back(PJutta);Coffee.push_back(PNico);for (auto ptr : Coffee){cout << *ptr<<" ";}cout << endl;//通过指针重写对象//*PNico = "Nicolai";for (auto ptr : Coffee){cout << *ptr << " ";}cout << endl;//指向这两个对象的分别有4 个 3 个cout << "use_count:" << Coffee[0].use_count() << endl;cout << "use_count:" << Coffee[2].use_count() << endl;//定义一个Deleter  shared构造参数//在这里PNico指向的对象都为空了 自动调用销毁函数 销毁对象 resize之后PNico = nullptr;Coffee.resize(2);//注意在return 0后也会自动销毁对象return 0;
}

在这里插入图片描述

4:对于array
shared_ptr提供的default delete调用的delete 不是delete[] 当share_ptr有“由new创建的单一对象的时候"default delete才会生效
可以自定义deleter对于array

std::shared_ptr p(new int[10],[](int * p)
{
delete []p;
});
//使用unique_ptr提供的辅助函数 内调delete[]std::shared_ptr p(new int[10],std::default_delete());

注意:shared_ptr不提供operator[]
unique_ptr提供
5:shared_ptr易错点
需要确保某对象只被一组shared_ptr指针拥有
下面代码是错的
int * p=new int;
share_ptr sp1§;
share_ptrsp2§;
sp1 和sp2都有权限去释放资源 可能资源会被释放 避免方式就是
在创建对象的时候设立smart point
shared_ptr sp1(new int);
shared_ptr sp2(sp1); //ok

相关内容

热门资讯

视频丨美明尼苏达州抗议和冲突持...   美国明尼阿波利斯等地的抗议和冲突已持续多日,局势紧张。美国联邦政府与民主党主政的明尼苏达州政府等...
美国白宫经济顾问:调查鲍威尔不...   据美国方面16日消息,美国白宫国家经济委员会主任凯文・哈西特表示,他预期司法部对美国联邦储备委员...
专访|“中国仍是全球经济增长的...   新华社日内瓦1月18日电 专访|“中国仍是全球经济增长的最大贡献者”——访世界经济论坛总裁博尔格...
砥砺奋进 建设更高水平平安中国   央视新闻客户端消息(新闻联播):建设更高水平平安中国,事关人民美好生活、事关国家长治久安。202...
主播说联播丨10万亿度电的“新...   突破10万亿度!2025年,我国全年全社会用电量迈上新台阶,规模继续保持世界第一。  用电总量,...
封关首月洋浦港进出港船舶351...   记者从洋浦海事局获悉,海南自贸港封关首月,各项业务平稳过渡,海上交通动脉安全高效运行。首月共保障...
2025年中国中亚进出口总值首...   中新社北京1月18日电 (记者 尹倩芸)中国商务部18日公布的数据显示,2025年,中国—中亚进...
国家电网重庆市电力公司原党委书...   据中央纪委国家监委驻国家电网有限公司纪检监察组、湖北省纪委监委消息:国家电网重庆市电力公司原党委...
潜心补短板 着力优结构——开年...   新华社北京1月18日电 题:潜心补短板 着力优结构——开年以来各地各部门稳投资观察  新华社记者...