【C++】C++语法笔记

智能指针

本章节参考C++11中的智能指针,进行整理得到。

C++11引入了智能指针,包括:

  • unique_ptr:独占指针对象,指针和指针所指对象的生命周期一致,且指针所指对象不能被其他指针共享。
  • shared_ptr:可共享指针对象,可以赋值给其他shared_ptrweak_ptr指针。当所有与对象相关联的shared_ptr型指针生命周期结束时,该对象的生命周期也结束。
  • weak_ptr:该指针不能决定所指对象的生命周期,引用所指对象时,需要lock()shared_ptr才能使用。

示例:

// 独占指针
unique_ptr<int> up1(new int(11));
// 独占指针不能被用于赋值
unique_ptr<int> up2 = up1; // ERROR.
// 独占指针可以转交控制权,自身失去控制权变为空指针。
unique_ptr<int> up3 = move(up1); // CORRECT.
// 独占指针的释放,相应的对应也会被释放。
up3.reset()

// 共享指针
shared_ptr<string> sp1(make_shared<string>("Hello"));
// 共享指针可以用于赋值其他shared_ptr或weak_ptr.
shared_ptr<string> sp2 = sp1;
// 当一个shared_ptr释放时,如果存在至少一个其他shared_ptr共享其所指对象,则所指对象不被释放;若不存在shared_ptr指向所指对象,那么所指对象也被释放。
sp1.reset()
cout << *sp2 << endl; // CORRECT.

// 弱指针,可以接受共享指针的赋值
weak_ptr<string> wp = sp2;
// 引用弱指针所指对象时,需要使用lock()
cout << *wp.lock() << endl; // CORRECT.
// 当弱指针所指对象相关联的所有shared_ptr都被释放时,所指对象也被释放,弱指针不能引用所指对象
sp2.reset();
cout << *wp.lock() << endl; // ERROR.

shared_ptrweak_ptr的工作原理:
它们并不直接指向所指对象,而是指向一个ptr_manage的对象。该对象包含两部分,一部分记录shared_ref_countweak_ref_count,分别表示引用它的shared_ptrweak_ptr的个数;另一部分的ptr存放真正的所指对象的指针地址。

数据容器

list

vector

deque

特点:

  • 动态空间;
  • 头端和尾端都可以执行插入和删除操作;

array

特点:

  • 静态空间固定大小;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值