c++释放内存的方法(c++ 获得内存使用情况)

本期是C++基础语法分享的第八节,今天给大家来分享一下:

(1)内存分配和管理;

(2)malloc、free;

(3)new、delete;

(4)定位 new;

(5)delete this 合法吗?

(6)如何定义一个只能在堆上(栈上)生成对象的类?

C++基础语法梳理:内存分配和管理

内存分配和管理

malloc、calloc、realloc、alloca

malloc:申请指定字节数的内存。申请到的内存中的初始值不确定。

calloc:为指定长度的对象,分配能容纳其指定个数的内存。申请到的内存的每一位(bit)都初始化为 0。

realloc:更改以前分配的内存长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定。

alloca:在栈上申请内存。程序在出栈的时候,会自动释放内存。但是需要注意的是,alloca 不具可移植性, 而且在没有传统堆栈的机器上很难实现。alloca 不宜使用在必须广泛移植的程序中。C99 中支持变长数组 (VLA),可以用来替代 alloca。

malloc、free

用于分配、释放内存

malloc、free 使用

申请内存,确认是否申请成功

char *str = (char*) malloc(100);
assert(str != nullptr);

释放内存后指针置空

free(p); 
p = nullptr;

new、delete

new / new[]:完成两件事,先底层调用 malloc 分配了内存,然后调用构造函数(创建对象)。

delete/delete[]:也完成两件事,先调用析构函数(清理资源),然后底层调用 free 释放空间。

new 在申请内存时会自动计算所需字节数,而 malloc 则需我们自己输入申请内存空间的字节数。

new、delete 使用

申请内存,确认是否申请成功

int main()
{
    T* t = new T();     // 先内存分配 ,再构造函数
    delete t;           // 先析构函数,再内存释放
    return 0;
}

定位 new

定位 new(placement new)允许我们向 new 传递额外的地址参数,从而在预先指定的内存区域创建对象。

new (place_address) type
new (place_address) type (initializers)
new (place_address) type [size]
new (place_address) type [size] { braced initializer list }

(1)place_address 是个指针

(2)initializers 提供一个(可能为空的)以逗号分隔的初始值列表

delete this 合法吗?

合法,但:

必须保证 this 对象是通过 new(不是 new[]、不是 placement new、不是栈上、不是全局、不是其他对象成员)分配的

必须保证调用 delete this 的成员函数是最后一个调用 this 的成员函数

必须保证成员函数的 delete this 后面没有调用 this 了

必须保证 delete this 后没有人使用了

如何定义一个只能在堆上(栈上)生成对象的类?

只能在堆上

方法:将析构函数设置为私有

原因:C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,则不能在栈上创建对象。

只能在栈上

方法:将 new 和 delete 重载为私有

原因:在堆上生成对象,使用 new 关键词操作,其过程分为两阶段:第一阶段,使用 new 在堆上寻找可用内存,分配给对象;第二阶段,调用构造函数生成对象。将 new 操作设置为私有,那么第一阶段就无法完成,就不能够在堆上生成对象。

版权声明:本文图片和内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送联系客服 举报,一经查实,本站将立刻删除,请注明出处:https://www.4kpp.com/7963.html

(0)
漫空客漫空客
上一篇 2023年4月23日
下一篇 2023年4月23日

相关推荐

  • 领证发现丈夫是妹夫(领证发现丈夫是妹夫韶涵江)

    近日,河南焦作博爱县,二婚的郭女士和男友去领证时发现自己竟然还没有离婚。经查,在2001年时,郭女士和亲妹夫办理了婚姻登记,目前都没有离婚,而这一切,郭女士完全不知情。郭女士疑惑:…

    2023年4月20日
    1120
  • 四个纬度探析善意取得发票涉及税款(税、抗税、骗税的)

    导读:善意取得发票适用条件与税收征管法第五十二条注明的条件无法直接关联,因此在立法层面无法穷尽的情况下就需要宽泛的表述。例如,现行法律规定偷税、抗税、骗税的,税务机关追征期不受期限…

    投稿 2023年4月23日
    1340
  • 淘宝网女人(淘宝女是什么意思)

    北京商报讯(记者 何倩)11月13日,北京商报记者了解到,李佳琦于11月12日晚间宣布开设助播团淘宝新直播间“所有女生”来拓宽选品的广度。为了给“所有女生”直播间引流,李佳琦还与庆…

    投稿 2023年4月20日
    1110
  • 淘宝免费开店考试(淘宝开店考试在哪里找)

    一、天猫开店的流程 进驻天猫需要大量材料证实,材料必然是越全方面就越好。 1、申请办理公司支付宝账号且开展商家认证: 1)规定:给予一个全新的账户支付宝账号,不能关联一切淘宝VIP…

    投稿 2023年4月20日
    1020
  • 原神食物收集水煮鱼黑背鲈图鉴大全

    《原神》是由米哈游自主研发的一款全新开放世界冒险游戏。游戏发生在一个被称作「提瓦特」的幻想世界,在这里,被神选中的人将被授予「神之眼」,引导元素之力。这次给大家带来的是原神食物收集…

    2023年4月23日
    1010
  • 额头高的女人(额头高的女人有什么说法)

    今天给大家介绍一个额头很高的女人。额头高的女人有哪些知识点?希望对你有帮助,也别忘了收藏这个站点。 女生额头高吗? 首先,高额头女人的脸 早年的运气和聪明。 额头高的女人天生聪明,…

    投稿 2023年4月23日
    2330
  • 快递服务增值税税目税率探讨(分拣、运输、派送)

    《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》再次强调了建设现代物流体系对形成强大国内市场、构建新发展格局的重要支撑作用。快递业作为与电子商务融合发展…

    投稿 2023年4月23日
    3160
  • 土地确权证怎么办理(村里故意不给确权的土地该怎么办)

    2013年1月31日中央下发一号文件,全面开展农村土地确权登记颁证工作。2018年3月,国家正式启动农村房屋不动产登记发证试点工作。 对于土地确权,相信大家都不陌生,从法律的角度上…

    2023年4月23日
    1170
  • 动如脱兔静如(动如脱兔静如处子是好话吗)

    今天给大家分享的是静如处子的知识,我也会解释一下静如处子是不是一个好词。如果你碰巧解决了你现在面临的问题,别忘了关注这个网站,现在就开始! 「静如处子,动如兔」出自哪里?你什么意思…

    投稿 2023年4月23日
    1440
  • 返利网怎么赢利(返利网怎么赢利啊)

    “足不出户,动动手指,日赚百元,月入过万”相信这段时间宅家为疫情防控做贡献的您,一定见到过很多类似的“刷单”广告,这样高薪又轻松的工作您心动了吗? 朝检君偷偷告诉您刷单暴富攻略: …

    投稿 2023年4月23日
    2490

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注