C++中的内存管理方式

一、C++内存管理方式简介

C语言中的内存管理方式在C++中可以继续使用,但是在有些地方就无能为力,而且使用起来比较麻烦。因此C++中引入了自己的内存管理方式,通过new和delete操作符进行动态内存管理。

二、new语法

new可以申请1个或多个空间,且可以为这些空间初始化(未初始化的空间默认为0)

cpp 复制代码
int* ptr1 = new int;//申请一个int大小空间,默认初始化为0
int* ptr2 = new int[10];//申请10个int大小空间,默认初始化为0

int* ptr3 = new int(1);//申请一个int大小空间,初始化为1
int* ptr4 = new int[10] {1, 2, 3, 4, 5};//申请10个int大小空间,前5个空间初始化为1,2,3,4,5,后5个默认初始化为0

new申请空间无需手动检查是否失败,因为new申请空间失败后会抛异常

cpp 复制代码
void func()
{
    int n = 1;
    while (1)
    {
        int* ptr = new int[1024 * 1024 * 100];
        cout << n << "->" << ptr << endl;
        ++n;
    }
}

int main()
{
    func();
    //捕获异常
    try
    {
        func();
    }
    catch (const exception& e)
    {
        cout << e.what() << endl;
    }
    return 0;
}

三、delete语法

delete在释放空间时,对于一次申请多个空间的需要带上[ ]

cpp 复制代码
delete ptr1;
delete[] ptr2;
delete ptr3;
delete[] ptr4;

四、链表结点实例代码

new自定义类型空间时,编译器会自动调用该自定义类型的构造函数

cpp 复制代码
struct ListNode {
    struct ListNode* _next;
    int _val;
    //构造函数
    ListNode(int val)
        :_next(nullptr)
        ,_val(val)
    {}
};
//构建链表
ListNode* CreateList(int n)
{
    ListNode head(-1);//哨兵位
    ListNode* tail = &head;
    int val;
    cout << "请依次输入" << n << "个结点值" << endl;
    for (size_t i = 0; i < n; i++)
    {
        cin >> val;
        tail->_next = new ListNode(val);
        tail = tail->_next;
    }
    return head._next;
}
相关推荐
雾岛听蓝17 小时前
C++ 类和对象(一):从概念到实践,吃透类的核心基础
开发语言·c++·经验分享·笔记
Dream it possible!18 小时前
LeetCode 面试经典 150_图_克隆图(90_133_C++_中等)(深度优先:DFS)
c++·leetcode·面试·
鸭子程序员18 小时前
c++ 算法
开发语言·c++·算法
不会c嘎嘎19 小时前
算法百练,直击OFFER -- day5
c++·算法
序属秋秋秋19 小时前
《Linux系统编程之进程环境》【环境变量】
linux·运维·服务器·c语言·c++·操作系统·系统编程
乌萨奇也要立志学C++19 小时前
【洛谷】二分查找专题 告别二分死循环!模板 + 细节 + 实战
c++·算法
Rock_yzh19 小时前
LeetCode算法刷题——128. 最长连续序列
数据结构·c++·算法·哈希算法
wheeldown19 小时前
【Rokid+CXR-M】基于Rokid CXR-M SDK的博物馆AR导览系统开发全解析
c++·人工智能·ar
利刃大大20 小时前
【c++中间件】语音识别SDK && 二次封装
开发语言·c++·中间件·语音识别
晨非辰20 小时前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年