C++:new和delete的用法

简介: C++:new和delete的用法

地址分类:

  • 栈区:函数的形参,非静态的局部变量
  • 堆区:用于程序运行时动态内存分配

C++中利用new操作符在堆区开辟数据

堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符delete

利用new创建的数据,会返回该数据对应的类型的指针


  1. new的用法
int* p=new int(10);


基本语法

int* fun()
{
    int* a = new int(10);
    return a;
}
int main()
{
    int* p = fun();
    cout << *p << endl;
    delete p;
    return 0;
}
  1. 在堆区利用new开辟数组
void test()
{
    //创建10整形数据的数组在堆区
    int* arr = new int[10];  //10代表数组有10个元素
    for (int i = 0; i < 10; i++)
    {
        arr[i] = i + 10;    //给十个元素赋值10~19
    }
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << endl;
    }
    //释放堆区数组
    delete[] arr;  //释放数组的时候,要加[]才可以
}
int main()
{
    test();
    return 0;
}
  1. delete

delete运算符使用的一般格式为

delete []指针变量


例如要撤销上面用new开辟的空间用

delete p;


上面我们用“new int[10];”开辟的数组空间,把new返回的指针赋给了指针变量arr,则应该用以下形式的delete运算符撤销该空间:

delete[] arr;  //释放数组的时候,要加[]才可以
目录
相关文章
|
1月前
|
C++
C++(十九)new/delete 重载
本文介绍了C++中`operator new/delete`重载的使用方法,并通过示例代码展示了如何自定义内存分配与释放的行为。重载`new`和`delete`可以实现内存的精细控制,而`new[]`和`delete[]`则用于处理数组的内存管理。不当使用可能导致内存泄漏或错误释放。
|
2月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
17 1
|
2月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
40 0
|
3月前
|
NoSQL 编译器 Redis
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
|
3月前
|
C++
C++ string中的函数和常用用法
C++ 中string中的函数和常用用法
29 4
|
3月前
|
存储 C语言 C++
【C/C++】动态内存管理( C++:new,delete)
C++的`new`和`delete`用于动态内存管理,分配和释放内存。`new`分配内存并调用构造函数,`delete`释放内存并调用析构函数。`new[]`和`delete[]`分别用于数组分配和释放。不正确匹配可能导致内存泄漏。内置类型分配时不初始化,自定义类型则调用构造/析构。`operator new`和`operator delete`是系统底层的内存管理函数,封装了`malloc`和`free`。定位`new`允许在已分配内存上构造对象,常用于内存池。智能指针等现代C++特性能进一步帮助管理内存。
|
3月前
|
NoSQL Redis C++
c++开发redis module问题之避免多个C++模块之间因重载operator new而产生的冲突,如何解决
c++开发redis module问题之避免多个C++模块之间因重载operator new而产生的冲突,如何解决
|
15天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
60 30
|
4天前
|
并行计算 Unix Linux
超级好用的C++实用库之线程基类
超级好用的C++实用库之线程基类
12 4
|
4天前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台