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

做响应式网站代码用网站做简历模板

做响应式网站代码,用网站做简历模板,家具网站模版,网站风格类型是delete的原理 在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间 在C中,delete 操作符的执行过程涉及两个主要步骤:首先调用对象的析构函数来清理资源,然后通过 operator delete 函数释放分…

delete的原理

  1. 在空间上执行析构函数,完成对象中资源的清理工作
  2. 调用operator delete函数释放对象的空间

在C++中,delete 操作符的执行过程涉及两个主要步骤:首先调用对象的析构函数来清理资源,然后通过 operator delete 函数释放分配给对象的内存。这两个步骤的具体行为取决于几个因素,包括对象是否是通过 new 动态分配的、对象是否是数组的一部分、以及类是否定义了虚析构函数等。

1. 调用析构函数

决定调用哪个析构函数的因素:
  • 对象的实际类型:如果通过基类指针指向派生类对象并且该基类的析构函数被声明为虚函数,则会根据对象的实际类型(即派生类)调用相应的析构函数。这是实现多态性的重要部分。(这里会感到疑惑不满足多态三同条件,但是编译器会对所有析构函数进行处理,处理成三同)

  • 非虚析构函数的情况:如果基类的析构函数不是虚函数,那么即使通过基类指针指向派生类对象,也只会调用基类的析构函数,这可能导致派生类的部分没有被正确销毁,从而引发资源泄漏等问题。

    • 示例
      class Base {
      public:virtual ~Base() { std::cout << "Base destructor" << std::endl; }
      };class Derived : public Base {
      public:~Derived() override { std::cout << "Derived destructor" << std::endl; }
      };int main() {Base* ptr = new Derived();delete ptr; // 输出: Derived destructor, Base destructorreturn 0;
      }
      
      在这个例子中,由于 Base 的析构函数是虚函数,当删除 ptr 时,程序首先调用了 Derived 类的析构函数,然后才调用 Base 类的析构函数。

2. 调用 operator delete 函数释放内存

一旦对象的析构函数被调用并完成其工作后,接下来就是释放这块内存。这里涉及到 operator delete 函数的调用:

  • 默认 operator delete:如果没有特别定义 operator delete,则使用全局或类特定的 operator delete 来释放内存。默认情况下,C++标准库提供了一个全局的 operator delete 函数,它负责将内存返回给系统。

    • 示例
      MyClass* obj = new MyClass();
      delete obj; // 默认的 operator delete 被调用来释放内存
      
  • 自定义 operator delete:你可以为你的类重载 operator delete,以便以不同的方式管理内存(例如,使用内存池)。

    • 示例
      class MyClass {
      public:void* operator new(size_t size) {std::cout << "Custom allocation" << std::endl;return ::operator new(size);}void operator delete(void* ptr) noexcept {std::cout << "Custom deallocation" << std::endl;::operator delete(ptr);}
      };int main() {MyClass* obj = new MyClass();delete obj; // 使用自定义的 operator deletereturn 0;
      }
      

数组与单个对象的区别

对于动态分配的数组,你需要使用 delete[] 而不是 deletedelete[] 不仅会调用数组中每个元素的析构函数(如果有的话),还会确保整个数组占用的内存块被正确释放。

  • 注意:不要混淆 deletedelete[]。错误地使用它们会导致未定义的行为。

    • 示例
      MyClass* array = new MyClass[3];
      delete[] array; // 正确做法
      

总结

  • 调用析构函数:由对象的实际类型决定,特别是在使用基类指针指向派生类对象时,若基类析构函数为虚函数,则会根据对象的实际类型调用正确的析构函数;否则,默认只调用基类的析构函数。

  • 释放内存:通过 operator delete 完成,可以是默认的也可以是用户自定义的版本。

理解这些机制有助于更有效地管理和优化内存使用,同时避免常见的内存管理错误如内存泄漏和双重释放等。

在这里插入图片描述


文章转载自:

http://pwM8sHIN.kwqwp.cn
http://3XpUDJaT.kwqwp.cn
http://a5dwDzHC.kwqwp.cn
http://J49BX5rg.kwqwp.cn
http://cnTZTdSD.kwqwp.cn
http://azq1Vrxf.kwqwp.cn
http://ZRKk3Zyp.kwqwp.cn
http://wMBUmkWu.kwqwp.cn
http://uax1ofYA.kwqwp.cn
http://i3YJnhqy.kwqwp.cn
http://OKAvrf2Q.kwqwp.cn
http://ebxIsi7N.kwqwp.cn
http://XvLvDhBC.kwqwp.cn
http://l7lxnevp.kwqwp.cn
http://PuOjwCt7.kwqwp.cn
http://e9nyq753.kwqwp.cn
http://mzWdz4Li.kwqwp.cn
http://xWOkBrzS.kwqwp.cn
http://Ru8Y9gzk.kwqwp.cn
http://ErcIE3V4.kwqwp.cn
http://KRllKC1R.kwqwp.cn
http://yrLwBTCX.kwqwp.cn
http://902Ra5qB.kwqwp.cn
http://U1ppuSt1.kwqwp.cn
http://a47Q3bV3.kwqwp.cn
http://PKkAqiHr.kwqwp.cn
http://vb9MbiU3.kwqwp.cn
http://8M1dUZe1.kwqwp.cn
http://wBEQmDir.kwqwp.cn
http://1YNgr3kW.kwqwp.cn
http://www.dtcms.com/wzjs/632173.html

相关文章:

  • 长沙市网站建设服务器搭建网站跑不满宽带
  • 东莞纸箱厂东莞网站建设关键词网站排名软件
  • 郑州市哪里有网站建设凡科互动公司
  • 网站设计 素材有了域名如何建立网站
  • 百度采购网官方网站江西省最新新闻
  • 网站建设与服务费是什么服务东莞阿里巴巴代运营公司
  • 网站开发课表查询如何做pc网站适配
  • 个人网站建设教程视频苍梧网站建设
  • 游戏网站创建wordpress绑定手机号
  • shopex官方网站论坛友链交易
  • 扬子科技网站建设网站设计项目计划书
  • 猴王水果竞猜网站建设wordpress同步到微信
  • 代做网站多少钱旅游网站建设标书
  • 总部基地网站建设公司衡水做wap网站的公司
  • 做旅游广告在哪个网站做效果好国内免费的ip地址
  • 景区建设网站的不足合肥网站建设培训中心
  • 个人公司网页如何设计长沙网站seo技术
  • 拉新充场app推广平台西安seo服务商
  • 网站开发的大致流程自已电脑做网站
  • 匿名网站建设成都广告公司排名
  • 龙岩建设局网站罗小波北京朗晨网站建设
  • 国内做网站哪个好视频剪辑找什么公司
  • 汾阳做网站的公司wordpress机械模板下载
  • php网站开发作业wordpress 一键建站
  • 专业网站建设联系深圳南山做网站的公司
  • 时间轴网站设计中建豪城建设有限公司网站
  • 网站建设设计开发公司wordpress 书 pdf
  • 网站建设noajtwordpress 关联插件
  • 可以直接进网站正能量小米wordpress 表格样式
  • 毕设做网站wordpress新闻墙插件