c++中new的三种用法详细解析

C++中new的三种用法详细解析

new 是 C++ 中一个非常重要的关键字,主要用于动态分配内存。通常情况下,使用 new 就意味着需要手动管理这块内存的释放。new 的语法形式有三种,分别是:

  1. new operator
    • new 运算符来申请动态内存,并返回该内存的地址,也就是指针类型。
    • 语法是 new 数据类型;。创建出来的对象默认初始化,如果需要初始化,可以在类型名后加括号,并在括号内传递初始化参数。
  2. new type(n)
    • 创建指定类型的数组,并返回该数组首元素的地址。
    • 语法是 new 数据类型 [数组元素个数];。创建出来的数组按照默认方式进行初始化,如果需要初始化,可以在类型名后加括号,并在括号内传递初始化参数。
  3. placement new
    • 在指定的内存地址上构造一个对象。
    • 语法是 new (地址) 类型名(参数列表);。该内存应该在使用 delete 操作符时清理,这样才能避免内存泄漏。

示例一

下面是以 new operator 动态分配内存的示例代码:

#include <iostream>
using namespace std;

int main() {
    int *ptr = NULL;
    ptr = new int; // 动态分配内存空间,类型是int指针
    *ptr = 11;     // 初始化内存空间
    cout << "ptr指向的内存地址存储的值:" << *ptr << endl; // 打印出 "ptr指向的内存地址存储的值:11"
    delete ptr;  //释放指针变量ptr指向的动态内存空间
    ptr = NULL;  // 将指针变量ptr指向空地址
    return 0;
}

该代码中,首先通过 new 运算符动态分配了一段 int 类型的内存,然后为该内存设置了值,最后通过 delete 操作符释放了该内存空间。

示例二

下面是创建动态数组的示例代码:

#include <iostream>
using namespace std;

int main() {
    int* arr;  // 定义一个指针
    int n = 5; // 数组长度
    arr = new int[n]; // 动态分配内存空间,类型是int数组
    for (int i = 0; i < n; ++i) {
        arr[i] = i + 1; // 初始化内存空间
    }
    cout << "数组元素:";
    for (int i = 0; i < n; ++i) {
        cout << arr[i] << " "; // 打印出 "数组元素:1 2 3 4 5"
    }
    delete [] arr; //释放指针变量arr指向的动态内存空间
    arr = NULL;    // 将指针变量arr指向空地址
    return 0;
}

该代码中,首先通过 new 运算符动态分配了一段 int 类型的数组内存,然后给数组进行了初始化,最后通过 delete 操作符释放了该内存空间。

以上是对 C++ 中 new 操作符的三种用法的详细解析。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++中new的三种用法详细解析 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C语言中如何进行动态内存分配?

    C语言中的动态内存分配功能是通过函数库和提供的。动态内存分配指的是程序在运行过程中,根据需要在堆区或自由存储区中动态地为变量分配所需的内存空间,使得程序可以根据需要动态地使用内存,从而更加灵活和高效地使用计算机的资源。 在C语言中,动态内存分配的过程可以分为以下三个步骤: 申请内存空间:使用malloc()函数在堆区分配一块适当大小的内存空间。malloc(…

    C 2023年4月27日
    00
  • jsoneditor二次封装实时预览json编辑器组件react版

    为了方便大家使用 JSON 编辑器组件,可以对 jsoneditor 进行二次封装。下面是关于如何实现 jsoneditor 的二次封装的详细攻略。 准备工作 在开始实现之前,我们需要做一些准备工作: 安装依赖:在项目根目录下运行以下命令安装所需依赖: npm install jsoneditor react 引入样式:在index.js 文件中引入样式 i…

    C 2023年5月23日
    00
  • Js的Array数组对象详解

    Js的Array数组对象详解 简介 在 JavaScript 中,Array 是一种重要的数据结构。简单来讲,数组就是一种存储一组数据的方式,这些数据可以是任意类型,包括数字、字符串、布尔值、对象等等。 而 Array 是一种对象,它是 JavaScript API 中自带的,具有一系列的方法和属性,可以方便地操作数组。 在本文中,我将详细介绍 Array …

    C 2023年5月23日
    00
  • PHP JSON格式的中文显示问题解决方法

    PHP 中 JSON 格式对于中文字符的处理方式存在一些问题,下面提供一种解决方法。 问题分析 在使用 PHP 中的 json_encode 函数将一个数组或对象转换为 JSON 字符串时,如果数组或对象中含有中文字符,那么生成的 JSON 字符串中这些中文字符会被转义成 Unicode 编码形式。 例如,以下数组: $data = [ "name…

    C 2023年5月23日
    00
  • 基于C语言打造高效通讯录的示例代码

    针对“基于C语言打造高效通讯录的示例代码”的完整攻略,我们可以分为以下几个步骤来进行讲解: 1.设计数据结构 在打造通讯录的代码中,我们需要首先设计合理的数据结构来储存通讯录信息。在此我们可以采用链表数据结构来实现。所以在数据结构的设计中,需要定义一个结构体来存储每位通讯录人员的信息,然后私有一个指向实体的指针来实现链表。 2.实现通讯录基本功能 通讯录的基…

    C 2023年5月24日
    00
  • 天谕雷罡圣堂怎么加点 天谕雷罡圣堂加点攻略

    天谕雷罡圣堂加点攻略 天谕雷罡圣堂是一款策略RPG游戏,在游戏中加点是非常重要的一件事情。本文将为大家介绍如何正确地加点以及天谕雷罡圣堂加点攻略。 加点原则 根据职业特长加点,如攻击型职业加攻击,防御型职业加防御等; 根据职业技能加点,如有狂暴技能的职业需要加点提升狂暴效果等; 根据自己的游戏风格加点,如喜欢输出的可以加攻击,喜欢坦克的可以加防御等; 根据B…

    C 2023年5月22日
    00
  • C语言中如何利用循环嵌套输出一个菱形

    要在C语言中利用循环嵌套输出一个菱形,我们可以采用以下步骤: 首先,确定菱形的大小。假设我们要输出一个边长为5的菱形,那么菱形的上、下两部分可以看作是五个等腰三角形组成的。其中,上半部分的行数为1、3、5,下半部分的行数为3、1。 第二步,打印上半部分的等腰三角形。利用两层循环分别控制行数和列数。第一层循环控制行数,第二层循环控制列数。在循环中,通过对行数和…

    C 2023年5月23日
    00
  • 替换json对象中的key最佳方案

    为了替换JSON对象中的key,我们可以尝试使用以下方法: 遍历对象并创建新的对象 我们可以遍历JSON对象,对每个键值对进行检查,然后创建一个新的对象来替换旧的对象中的Key。例如在JavaScript中: const oldObj = {"oldKey": "value"}; const newObj = {}; …

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部