千家信息网

C++中怎么使用new和delete进行动态内存分配与数组封装

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"C++中怎么使用new和delete进行动态内存分配与数组封装",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++中怎么使用new
千家信息网最后更新 2026年10月31日C++中怎么使用new和delete进行动态内存分配与数组封装

这篇文章主要讲解了"C++中怎么使用new和delete进行动态内存分配与数组封装",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++中怎么使用new和delete进行动态内存分配与数组封装"吧!

1、使用new申请内存

在某些情况下,程序只有在运行期间才能确定所需内存大小,此时应该使用new申请内存。申请成功的情况下会返回首地址,通过指向首地址的指针可以访问申请的内存,使用new申请内存的的语法如下:

new 数据类型(初始化参数列表);

下面的例子定义了Duck类型的指针,并通过new申请内存,返回的地址赋值给指针,如下:

/// 1、定义目标类型的指针Duck *pointerDuck;/// 2、使用new申请内存pointerDuck = new Duck(666);/// 3、使用指针调用对象public成员printf("%d \n", pointerDuck->getAge());

需要注意的是:new返回的是地址,所以需要预先定义目标类型的指针

2、使用delete释放内存

通过new申请的内存必须通过delete才能释放,如果不释放就会导致"内存泄漏",使用delete释放内存的语法如下:

delete 指针名;/// 实例如下:delete pointerDuck;

此外,delete语句执行时会调用对象的析构函数(对于自定义类型),同一内存空间只能被delete一次,如果内存空间被重复delete则会导致程序运行错误。

3、使用new申请内存时的初始值

按照对象是否具有构造函数,new申请内存时根据类型是否有构造函数分为下面两种情况:

  • 对于有构造函数的对象,new会执行相应的构造函数;

  • 对没有构造函数的基本数据类型,如果在类型名后加()则使用0进行初始化,但是不能使用具体值进行初始化,类型名后不加()则不进行初始化而是随机值;

下面是没有构造函数的基本数据类型使用new的例子:

/// 类型名后无括号则随机值 pointer = new int[3];/// 类型名后有括号则使用0初始化pointer = new int[3]();

4、使用new和delete申请和释放数组空间

对于数组,使用new动态申请内存空间的语法如下:

new 数据类型[数组长度];/// 如下pointer = new int[3]();

使用delete释放内存的语法如下:

delete[] 指针名;/// 如下delete[] pointer;

5、用类封装new申请和释放的数组空间

使用new申请数组,返回的地址作为指针的值。使用指针访问数组存在越界的可能性,而且不便于数组功能的扩展。下面通过自定义类,来实现数组的元素的赋值和访问等功能扩展,同时解决数组存在的访问越界的问题,以及封装数组空间的申请和释放。下面分步骤分析整型数组的代码编写过程:

  • (1)确定私有数据成员:数组大小arraySize和数组指针pointerInt需要声明为私有数据成员;

  • (2)确定构造函数:构造函数需要通过数组大小arraySize,使用new申请对应长度的数组内存空间,并将返回的地址赋值给指针pointerInt;

  • (3)确定析构函数:析构函数需要通过delete释放pointerInt申请的空间;

  • (4)确定get和set函数:get和set函数需要进行"越界检查",并完成取元素和设置元素值的功能;

下面是具体实现的代码;

class ArrayOfInt {public:    /// 构造函数中使用new申请数组空间    ArrayOfInt(int size) :arraySize(size){        pointerInt = new int[arraySize]();    }    /// 析构函数完成数组内存释放    ~ArrayOfInt() { delete pointerInt; };        /// set函数进行元素值的设置,并进行越界检查    void setElement(int index, int value) {        assert(index >= 0 && index < arraySize);        *(pointerInt + index)=value;    }    /// get函数进行越界检查并返回指定位置的元素值    int getElement(int index) {        assert(index >= 0 && index < arraySize);        return *(pointerInt + index);    }private:    /// 私有数据成员负责记录数组长度和首地址    int *pointerInt;    int arraySize;};

下面是使用这个数组的例子:

ArrayOfInt arrayOfInt(3);arrayOfInt.setElement(1, 666);printf("%d \n", arrayOfInt.getElement(1));

6、使用new申请多维数组

首先必须明确,基本类型的指针是不能用于二维或者更高维的数组的,下面定义的指针只能访问一维数组:

int *pointer;

为了访问n维数组,必须定义n-1维的指针数组:

int (*pointer)[2][3];/// 第一维的[4]不是指针的维度pointer = new int[4][2][3]();

感谢各位的阅读,以上就是"C++中怎么使用new和delete进行动态内存分配与数组封装"的内容了,经过本文的学习后,相信大家对C++中怎么使用new和delete进行动态内存分配与数组封装这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

数组 内存 函数 指针 类型 空间 地址 数据 封装 动态 C++ 分配 元素 对象 情况 成员 语法 例子 功能 大小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 耶加雪菲 互联网是第几次科技革命的成果 智能科技公司是互联网公司吗 远信互联网科技 中国互联网科技发展 睿民互联网科技 深圳卡尔迅互联网科技有限公司怎么样 滨湖区互联网智能科技产品供应 来此购互联网科技有限公司 厦门千工互联网科技有限公司 移动互联网年度科技创新 天津腾达互联网科技有限公司 互联网行业科技股 高科技互联网套路 互联网金融科技元年 富国互联网科技002692 广东鹅鹅鹅互联网科技有限公司 互联网科技机房 湖北辰鑫科技互联网 安徽零酒互联网科技有限公司 广州为想互联网科技有限公司 互联网最新的科技有限公司 互联网与科技金融数据 佰商互联网科技有限公司 隆华科技工业互联网 互联网科技公司有风险吗 烟台灵鸽互联网科技有限公司 工业互联网展湾科技股份有限公司 工业互联网科技成果转化 银川新华互联网科技学校原画
0