• c++基础:new函数


    new函数

    new是用于动态分配内存的操作符。它用于在堆内存中创建一个新的对象或数据结构,并返回一个指向该内存的指针。这是C++中进行动态内存分配的主要方式之一,通常与delete操作符一起使用来释放先前分配的内存。

    以下是使用new操作符的一些示例:

    动态分配一个整数,并将其赋值给指针:
    
    • 1
    int *pInt = new int;
    *pInt = 42;
    
    • 1
    • 2
    动态分配一个对象并调用其构造函数:
    
    • 1
    class MyClass {
    public:
        MyClass() {
            // 构造函数代码
        }
    };
    
    MyClass *pObj = new MyClass;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    动态分配一个数组:
    
    • 1
    int *pArray = new int[5]; // 创建一个包含5个整数的数组
    pArray[0] = 10;
    pArray[1] = 20;
    // ...
    
    • 1
    • 2
    • 3
    • 4

    需要注意的是,使用new分配的内存需要手动释放,否则可能会导致内存泄漏。释放内存时,通常使用delete操作符:

    delete pInt;    // 释放单个整数的内存
    delete pObj;    // 释放对象的内存
    delete[] pArray; // 释放数组的内存
    
    • 1
    • 2
    • 3

    请确保在不再需要分配的内存时及时释放它,以避免内存泄漏问题。在现代C++中,建议使用智能指针(如std::shared_ptr和std::unique_ptr)来管理内存,以减少手动内存管理的复杂性和错误。

    new用法

    在C++中,new是一个操作符,用于在堆上动态分配内存空间。它的基本语法为:

    指针变量 = new 数据类型;
    
    • 1

    其中,指针变量是一个指向已分配内存空间的指针,数据类型是要分配的数据类型。

    例如,如果想动态分配一个整型变量,可以使用以下语句:

    int *p = new int;
    
    • 1

    这样就在堆上动态分配了一个int型变量,并将其地址赋给了指针变量p。

    另外,new操作符还可以用于动态分配数组。例如,如果想动态分配一个大小为10的整型数组,可以使用以下语句:

    int *p = new int[10];
    
    • 1

    这样就在堆上动态分配了一个大小为10的int型数组,并将其首元素的地址赋给了指针变量p。

    使用完new分配的内存后,应该使用delete操作符来释放这些内存,避免内存泄漏。delete的使用方法为:

    delete 指针变量;
    
    • 1

    例如,如果要释放前面所分配的整型变量内存,可以使用以下语句:

    delete p;
    
    • 1

    如果要释放前面所分配的整型数组内存,可以使用以下语句:

    delete [] p;
    
    • 1

    使用new来动态的分配内存的操作符:是分配的内存块,

    new可以在运行时动态地申请内存来构造一个对象或一组对象,这些对象的生命周期由程序员控制。
    当使用new时一定要使用下面的释放内存的delete,否则会内存泄漏。

    new 数据类型;
    new 数据类型[数组大小];
    
    typeName * pointer_name = new typeName ;
    
    • 1
    • 2
    • 3
    • 4

    释放掉new开辟的内存空间delete

    delete 内存块的指针;
    释放的是指针指向的内存,不是删除指针本身。

    在C++中,使用new动态地分配内存空间,程序员需要手动释放这些内存空间以避免内存泄漏。可以使用delete表达式来释放由new运算符开辟的内存空间。

    delete有两种形式,一种是释放单个对象的内存,另一种是释放一个对象数组的内存。具体用法如下:
    例如:
    1:释放单个对象的内存

    int* ptr = new int;  //分配一个int类型的内存空间
    *ptr = 10;  //给这个内存空间赋值
    delete ptr;  //释放这个内存空间
    
    • 1
    • 2
    • 3

    2:释放一个对象数组的内存

    // 分配内存
    int* arr = new int[10];
    // 使用内存
    // ...
    // 释放内存
    delete[] arr;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    当delete表达式执行时,它会先调用该空间中的析构函数,然后将空间返回给操作系统。如果指针不是通过new分配的,则不能使用delete来释放它,否则会导致未定义的行为。

  • 相关阅读:
    25 张图详解交换机:秒懂二层交换机的 16 个问题
    MotoSimEG-VRC软件:安川机器人用户坐标系介绍与标定方法
    掌握 Postman 监控功能:自动化测试与性能监控的秘诀
    工厂方法模式Factory Method
    了解 Xcode 工作区、项目、方案和目标如何协同工作
    JVM常用命令
    C++ DoubleLinkedList
    官方新动作!老子云3D开发SDK又更新:新增3D测量,路径动画
    网络概念_二
    C语言实现DFS和BFS
  • 原文地址:https://blog.csdn.net/qq_46107892/article/details/132881283