网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

【Example】C++ 标准库智能指针 unique_ptr 与 shared_ptr

【概念直接搬运Docs】C 样式编程的一个主要 bug 类型是内存泄漏。 泄漏通常是由于为分配的内存的调用失败引起的deletenew。 现代 C++ 强调“资源获取即初始化”(RAII) 原则。 其理念很简单。 资源(堆内存、文件句柄、套接字等)应由对象“拥有”。 该对象在其构造函数中创建或接收新分配的资源,并在其析构函数中将此资源删除。 RAII 原则可确保当所属对象超出范围时,所有资源都能正确返回到操作系统。

创新互联公司专注于企业网络营销推广、网站重做改版、茂南网站定制设计、自适应品牌网站建设、HTML5建站电子商务商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为茂南等各大城市提供网站开发制作服务。

为了支持对 RAII 原则的简单采用,C++ 标准库提供了三种智能指针类型:std::unique_ptr、std::shared_ptr和std::weak_ptr。 智能指针可处理对其拥有的内存的分配和删除。 下面的示例演示了一个类,其中包含一个数组成员,该成员是在调用make_unique()时在堆上分配的。 对和的new调用deleteunique_ptr类封装。 当widget对象超出范围时,将调用 unique_ptr 析构函数,此函数将释放为数组分配的内存。

在现代 c + + 编程中,标准库包含智能指针,这些指针用于帮助确保程序不会出现内存和资源泄漏,并具有异常安全。

====================================

unique_ptr

unique_ptr 类型智能指针在设计上最显著的特点是内部托管的指针一旦被创建就不能被任何形式的复制给另一个unique_ptr,只可以被移动给另一个unique_ptr。unique_ptr 没有拷贝构造函数,因此不能用于赋值。该指针最常用的情况是单例模式和编译防火墙的封装。当一个 std::unique 生命周期结束时,将释放所托管的内存,也就意味着,如果它作为一个局部变量托管一个对象,对象的生命周期也仅限于当前作用域范围,调用 reset() 或 operator= 时也会释放原有内存。

// 演示创建 unique_ptr
unique_ptr u_brain = make_unique();
u_brain->HelloWorld();

// 移动 unique_ptr
unique_ptr um_barin = std::move(u_brain);
um_barin->HelloWorld();

// 移动方法2
std::swap(u_brain, um_brain);

// 错误 // um_barin = u_brain; // u_brain->HelloWorld(); // C

// 可以使用以下方法判断是否为空指针 if (um_brain == nullptr) { std::cout << "um_brain is nullptr" << std::endl; }

// 可以释放资源将指针恢复空指针
um_brain.reset();

分享标题:【Example】C++ 标准库智能指针 unique_ptr 与 shared_ptr
文章URL:http://bjjierui.cn/article/dsogosi.html

其他资讯