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

win10做网站服务器自己建一个网站需要多少钱?

win10做网站服务器,自己建一个网站需要多少钱?,周口建设公司网站,济南shuncheng科技 网站建设一.智能指针的设计思路 智能指针是类模板#xff0c;再栈上创建智能指针对象。把普通指针交给智能指针对象。智能指针对象过期时#xff0c;调用析构函数释放普通指针的内存。 智能指针的类型 auto_ptr是C98的标准#xff0c;c17已经弃用。unique_ptr、shared_ptr和weak_…一.智能指针的设计思路 智能指针是类模板再栈上创建智能指针对象。把普通指针交给智能指针对象。智能指针对象过期时调用析构函数释放普通指针的内存。 智能指针的类型 auto_ptr是C98的标准c17已经弃用。unique_ptr、shared_ptr和weak_ptr是C11标准的。 二.智能指针 unique_ptr C智能指针unique_ptr是C11标准库中提供的一种智能指针类型用于管理动态分配的资源主要用来避免内存泄漏和简化资源管理。unique_ptr是独占所有权的智能指针即同一时间只能有一个unique_ptr指向特定的资源当unique_ptr被销毁时它所管理的资源会被自动释放。 1.基本用法 方法1 unique_ptrAAp0(new AA(小明));//分配内存并初始化方法2 unique_ptrAAp0make_uniqueAA(小明);//c14标准方法3 AA*pnew AA(小明); unique_ptrAAp0(p);//用已存在的地址初始化方法4get()方法可以返回裸指针 2. 基本定义 包含头文件 #include memory以下是unique_ptr的简化版本的类模板定义省略了部分实现细节 template typename T class unique_ptr { private:T* ptr;public:// 构造函数unique_ptr(T* p) : ptr(p) {}// 移动构造函数unique_ptr(unique_ptr other) noexcept : ptr(other.ptr) {other.ptr nullptr;}// 析构函数~unique_ptr() {delete ptr;}// 禁止拷贝和赋值unique_ptr(const unique_ptr) delete;unique_ptr operator(const unique_ptr) delete;// 移动赋值运算符unique_ptr operator(unique_ptr other) noexcept {if (this ! other) {delete ptr;ptr other.ptr;other.ptr nullptr;}return *this;}// 获取裸指针T* get() const {return ptr;}// 重载运算符-T* operator-() const {return ptr;}// 重载解引用运算符*T operator*() const {return *ptr;}// 释放资源void reset() {delete ptr;ptr nullptr;} };3.实战测试 #includeiostream using namespace std;#includevector #includememory//智能指针头文件class AA { public:string m_name;AA():m_name(未定义) { cout m_name 调用构造函数AA() endl; }AA(const string name) :m_name(name) { cout 调用构造函数 m_name ) endl; }~AA() { cout 调用了析构函数~AA( m_name ) endl; }};int main() {AA* p1 new AA(小明);//使用智能指针来管理p//这里AA的意思是要管理的普通指针类型是AA//智能指针本来就是用来管理指针的所以不需要使用AA*unique_ptrAAptr1(p1);//与正常指针用法一致cout m_name (*ptr1).m_name endl;cout m_name ptr1-m_name endl;cout m_name (*p1).m_name endl;cout m_name p1-m_name endl;//system(pause);不能使用这个否则程序无法正常关闭析构函数无法成功调用return 0; }执行结果 三.智能指针 shared_ptr 在 C 中智能指针是一种用于管理动态分配对象的指针类可以帮助开发人员更好地管理内存资源避免内存泄漏等问题。std::shared_ptr 是 C11 标准库中提供的一种智能指针用于共享所有权的指针管理。std::shared_ptr 可以自动追踪有多少个指针共享同一个对象并在对象不再被引用时安全地释放内存。共享指针的引用计数会在创建、复制和销毁时进行递增和递减当引用计数为 0 时内存资源就会被释放。 使用方法:(和unique_ptr基本一样的) #include memorystd::shared_ptrint sharedPtr std::make_sharedint(10); 智能指针的复制: std::shared_ptrint sharedPtr2 sharedPtr; 使用 std::make_shared 创建对象时可以减少内存分配和额外的虚拟函数调用。可以使用 .use_count() 方法获取当前共享指针的引用计数。std::shared_ptr 还支持自定义的删除器用于指定释放内存时的操作。总的来说std::shared_ptr 可以帮助避免潜在的内存泄漏和悬空指针问题提高代码的健壮性和可维护性。 实战测试 #includeiostream using namespace std;#includevector #includememory//智能指针头文件class AA { public:string m_name;AA() :m_name(未定义) { cout m_name 调用构造函数AA() endl; }AA(const string name) :m_name(name) { cout 调用构造函数 m_name ) endl; }~AA() { cout 调用了析构函数~AA( m_name ) endl; }};int main() {AA* p1 new AA(小明);//使用智能指针来管理p//这里AA的意思是要管理的普通指针类型是AA//智能指针本来就是用来管理指针的所以不需要使用AA*shared_ptrAAptr1(p1);//与正常指针用法一致cout m_name (*ptr1).m_name endl;cout m_name ptr1-m_name endl;cout m_name (*p1).m_name endl;cout m_name p1-m_name endl;cout use_count ptr1.use_count() endl;//system(pause);不能使用这个否则程序无法正常关闭析构函数无法成功调用return 0; } 输出结果 四.智能指针 weak_ptr 在 C 中std::weak_ptr 是另一种智能指针用于解决 std::shared_ptr 循环引用所带来的问题。std::weak_ptr 允许你观察指向的对象但不拥有其所有权。通常与 std::shared_ptr 一起使用可以避免循环引用导致的内存泄漏问题。 以下是一些关于 std::weak_ptr 的重要点和用法 通过 std::weak_ptr 对象获std::shared_ptr 对象 std::shared_ptrint sharedPtr std::make_sharedint(10); std::weak_ptrint weakPtr sharedPtr;使用 std::lock_guard 和 std::shared_ptr::lock 方法来安全地获取 std::shared_ptr 对象避免访问已经释放的对象 if (std::shared_ptrint sharedPtr weakPtr.lock()) {// 使用 sharedPtr 访问对象 } else {// 对象已被释放 }std::weak_ptr 不增加引用计数只是提供了对对象的观察能力也不会阻止对象的释放。 可以使用 std::weak_ptr 来打破循环引用让对象能够被正确地释放。 std::weak_ptr 是一种很有用的工具可以帮助解决在使用智能指针时可能会遇到的循环引用问题确保内存资源能够正确地释放提高程序的稳定性和可靠性。 实战测试 #includeiostream using namespace std;#includevector #includememory//智能指针头文件class BB;class AA { public:string m_name;AA() :m_name(未定义) { cout m_name 调用构造函数AA() endl; }AA(const string name) :m_name(name) { cout 调用构造函数 m_name ) endl; }~AA() { cout 调用了析构函数~AA( m_name ) endl; }shared_ptrBBp_B;};class BB { public:string m_name;BB() :m_name(未定义) { cout m_name 调用构造函数BB() endl; }BB(const string name) :m_name(name) { cout 调用构造函数 m_name ) endl; }~BB() { cout 调用了析构函数~BB( m_name ) endl; }shared_ptrAAp_A; };int main() {AA* p1 new AA(小明);BB* p2 new BB(李华);//使用智能指针来管理p//这里AA的意思是要管理的普通指针类型是AA//智能指针本来就是用来管理指针的所以不需要使用AA*shared_ptrAAptr1(p1);shared_ptrBBptr2 (p2);//与正常指针用法一致cout ptr1-m_name (*ptr1).m_name endl;cout ptr1-m_name ptr1-m_name endl;cout ptr1-m_name (*p1).m_name endl;cout ptr1-m_name p1-m_name endl;cout ptr1-use_count ptr1.use_count() endl;cout ptr2-m_name (*ptr2).m_name endl;cout ptr2-m_name ptr2-m_name endl;cout ptr2-m_name (*p2).m_name endl;cout ptr2-m_name p2-m_name endl;cout ptr2-use_count ptr2.use_count() endl;ptr1-p_B ptr2;ptr2-p_A ptr1;//system(pause);不能使用这个否则程序无法正常关闭析构函数无法成功调用return 0; }由于相互执行都在等待对方释放资源结果两方都无法释放资源 解决方法使用weak_ptr
http://www.hkea.cn/news/14383316/

相关文章:

  • 千灯做网站做淘宝客如何引出图片到网站
  • 电信宽带做网站服务器可以直接进入的正能量网站
  • 预订网站模板公司怎样做网络推广
  • 广州企业网站哪家好博客一号wordpress主题
  • 天津网站seo设计微网站建设教程视频
  • 怎么做网站视频教程网站托管服务适合用于哪种类型的网站
  • 东莞网站建设最优html网页制作参考文献
  • 毕业设计某网站开发的开题报告范文南联网站建设哪家好
  • 专业深圳网站定制开发建网站学什么软件
  • 电商网站建设wordpress模拟接口
  • 给学校建网站那个系统好杭州房价暴跌已开始
  • 网站开发 税率小说推广赚钱
  • 自助建站系统介绍网站由谁备案
  • 网站建设开发定制如何在平台上推广产品
  • 有什么设计网站推荐个人免费建站的网站
  • 如何做拼车网站app无锡建设管理服务中心
  • 第三方做农产品价格数据的网站app网站建设手机APP软件开发
  • 安陆网站制作公司wordpress feedsky
  • 自己做网站 搜索功能开发wordpress几种系统
  • 深圳地铁建设集团网站手机怎么查看网站代码实现的
  • 江苏住房建设厅网站福州网站制作系统
  • 网站建设 青岛网站配置域名解析
  • mip网站模板wordpress版本
  • 网站 编程语言网站建设高端网页设计
  • 闵行建设机械网站好游快游app官方网站下载
  • 世纪购网站开发招聘丰联汽配网站建设成本
  • 黑龙江省华龙建设有限公司网站江阴高端网站建设
  • 怎么查网站到期时间查询网页制作 基础教程
  • 做网站换服务器怎么整网站建设 响应式 北京
  • 如何推广网站?网站建设设计服务公司