当前位置: 首页 > wzjs >正文

电子商务网站开发课程设计百度seo营销公司

电子商务网站开发课程设计,百度seo营销公司,wordpress 国际化 mo,哈尔滨地铁爱建站C 智能指针 一、智能指针类型概览 C 标准库提供以下智能指针&#xff08;需包含头文件 <memory>&#xff09;&#xff1a; unique_ptr&#xff1a;独占所有权&#xff0c;不可复制&#xff0c; 可移动shared_ptr&#xff1a;共享所有权&#xff0c;用于引用计数weak_pt…

C++ 智能指针


一、智能指针类型概览

C++ 标准库提供以下智能指针(需包含头文件 <memory>):

  1. unique_ptr:独占所有权,不可复制, 可移动
  2. shared_ptr:共享所有权,用于引用计数
  3. weak_ptr:观察 shared_ptr 对象,不增加计数

二、unique_ptr(独占指针)

核心特性

  • 唯一拥有指向对象的所有权
  • 支持移动语义(所有权转移)
  • 离开作用域自动释放内存
#include <iostream>
#include <memory>void unique_ptr_demo() {// 创建智能指针 (C++14推荐make_unique)std::unique_ptr<int> p1 = std::make_unique<int>(10);// 访问数据std::cout << *p1 << std::endl;  // 输出:10// 所有权转移std::unique_ptr<int> p2 = std::move(p1);std::cout << (p1 ? "非空" : "空") << std::endl;  // 输出:空
}int main() {unique_ptr_demo();return 0;
}

三、shared_ptr(共享指针)

核心特性

  • 通过引用计数共享所有权
  • 最后一个指针销毁时释放内存
  • 支持自定义删除器
#include <iostream>
#include <memory>class Data {
public:Data() { std::cout << "Data构造" << std::endl; }~Data() { std::cout << "Data析构" << std::endl; }
};void shared_ptr_demo() {std::shared_ptr<Data> p1;{ // 内部作用域auto p2 = std::make_shared<Data>();p1 = p2;  // 共享所有权std::cout << "引用计数: " << p1.use_count() << std::endl;  // 输出:2}std::cout << "引用计数: " << p1.use_count() << std::endl;  // 输出:1
}int main() {shared_ptr_demo();return 0;
}

share_ptr引起的循环引用的问题。循环引用就是内存泄漏。 因为对象之间相互引用,使得引用计数永远不会变为 0 ,对象所占用的堆内存一直无法被释放。随着程序运行,不断出现这种循环引用的情况,会导致可用内存越来越少,最终可能使程序崩溃,或者引发系统性能问题。

#include <memory>
#include <iostream>class B;
class A {
public:std::shared_ptr<B> bptr;~A() {std::cout << "~A()" << endl;}
};class B {
public:std::shared_ptr<A> aptr;~B() {std::cout << "~B()" << endl;}
};int main() {std::shared_ptr<A> aa = std::make_shared<A>();std::shared_ptr<B> bb = std::make_shared<B>();aa->bptr = bb;bb->aptr = aa;return 0;
}

四、weak_ptr(弱指针)

weak_ptr 是一种弱引用智能指针,它指向由 shared_ptr 管理的对象,但不增加对象的引用计数
核心特性

  • 不增加引用计数
  • 解决 shared_ptr 循环引用问题
  • 必须转换为 shared_ptr 才能访问数据
#include <iostream>
#include <memory>class Node {
public:std::weak_ptr<Node> partner;  // 使用weak_ptr打破循环~Node() { std::cout << "节点销毁" << std::endl; }
};void weak_ptr_demo() {auto node1 = std::make_shared<Node>();auto node2 = std::make_shared<Node>();node1->partner = node2;node2->partner = node1;if(auto sp = node1->partner.lock()) { std::cout << "有效伙伴节点" << std::endl; }
}int main() {weak_ptr_demo();return 0;
}

五、编译与运行
  1. 编译命令

    g++ -std=c++14 -o smart_ptr_demo smart_ptr_demo.cpp
    
  2. 运行结果

    Data构造
    引用计数: 2
    引用计数: 1
    Data析构
    节点销毁
    节点销毁
    

六、选择指南
指针类型使用场景性能开销
unique_ptr独占资源的场景(90%日常使用)
shared_ptr需要共享所有权的复杂场景
weak_ptr解决循环引用或观察共享资源

最佳实践

  1. 优先使用 make_unique/make_shared 创建指针
  2. 避免裸指针与智能指针混用
  3. 明确所有权关系,能用 unique_ptr 就不用 shared_ptr
http://www.dtcms.com/wzjs/506671.html

相关文章:

  • 网站定制需求seo外链技巧
  • 免费营销网站制作搜索引擎国外
  • 涿鹿镇做网站企业站seo
  • 大连网页设计师招聘福州关键词排名优化
  • 毕业设计做系统网站好做营销策划的公司
  • 漳州网站开发营销推广方案设计
  • 工程信息网站排名抖音优化是什么意思
  • 上海电商网站建设公司百度推广电话号码
  • 迈肯奇迹做网站百度云app下载安装
  • 浙江电信关于网站备案信息核实的公告网络推广seo是什么
  • 申请免费网站建设十大收益最好的自媒体平台
  • 怎样使用仿站小工具做网站淘宝怎么提高关键词搜索排名
  • 政务公开和网站建设工作问题新闻头条今日最新消息
  • 网站建设高端培训如何在google上免费推广
  • windows搭建网站开发百度知道客服电话
  • 制作一个网站需要注意什么楼市最新消息
  • 广东平台网站建设seo优化检测
  • 网站开发运营东莞做网站seo
  • 网站建设作业有哪些制作网页链接
  • 国外web设计网站模板下载北京做百度推广的公司
  • wb网页设计素材模板网站网页制作app
  • 团购网站营销方案推广普通话的宣传内容
  • 企业网站建设找外包公司做营销型企业网站建设的内容
  • 莱芜网站建设哪里有地推放单平台
  • 网站可以做系统还原吗希爱力双效片副作用
  • 大良营销网站建设信息郑州粒米seo顾问
  • 做了微网站陕西网站制作
  • 2018怎么做网站淘宝客最新病毒感染
  • 免费微网站建站系统百度快照网址
  • 专业做电子的外贸网站谷歌推广方案