c语言申请内存空间(c语言动态分配内存数组)

c语言申请内存空间(c语言动态分配内存数组)

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

  (1)内存分配和管理;

  (2)malloc、free;

  (3)new、delete;

  (4)定位 new;

  (5)delete this 合法吗?

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

  malloc、calloc、realloc、alloca

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

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

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

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

  用于分配、释放内存

  malloc、free 使用

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

  释放内存后指针置空

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

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

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

  new、delete 使用

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

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

  (1)place_address 是个指针

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

  合法,但:

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

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

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

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

  只能在堆上

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

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

  只能在栈上

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

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

推荐阅读

    探探语言设置|探探怎么设置语言

    探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

    虾类安装经验分享!

    虾类安装经验分享!,,虾类安装经验分享: 1,机箱的电源光盘应该接近代理价格,而内存和硬盘的价格是在互联网上找到的即时价格。主板套件,视频卡

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    咸鱼定位在哪设置|咸鱼如何修改定位

    咸鱼定位在哪设置|咸鱼如何修改定位,,1. 咸鱼如何修改定位首先要手机开启定位,闲鱼才能根据定位设定范围2. 怎么把咸鱼定位关掉闲鱼发布的

    闲鱼定位怎么设置|闲鱼怎么开启定位

    闲鱼定位怎么设置|闲鱼怎么开启定位,,1. 闲鱼怎么开启定位闲鱼上门回收流程答案如下:答:1、打开手机,点击闲鱼app。2/4进入闲鱼首页,点击页面

    Python之可迭代对象、迭代器、生成器

    Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法

    区域语言设置|区域语言设置工具

    区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的