new 和 delete

动态内存分配

基本概念:

静态内存分配:编译时分配内存,内存在整个程序运行期间一直存在,如全局变量和局部变量。
动态内存分配:运行时根据需要分配内存,可以在程序运行期间灵活地申请和释放内存,适用于需要灵活大小的数据结构,如动态数组、链表等。

new 操作符

基本用法:

new 操作符用于在堆内存中分配内存,并返回指向分配内存的指针。
语法:

pointer_variable = new data_type;
pointer_variable = new data_type[size];

示例:

#include <iostream>

int main() {
    // 分配一个整数
    int* p = new int;
    *p = 10;
    std::cout << "动态分配的整数值: " << *p << std::endl;

    // 分配一个整数数组
    int* arr = new int[5];
    for (int i = 0; i < 5; ++i) {
        arr[i] = i * 2;
    }

    std::cout << "动态分配的数组: ";
    for (int i = 0; i < 5; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    // 释放内存
    delete p;
    delete[] arr;

    return 0;
}

delete 操作符

基本用法:

delete 操作符用于释放先前通过new分配的内存,避免内存泄漏。
语法:

delete pointer_variable;
delete[] pointer_variable;

示例:

#include <iostream>

int main() {
    // 分配和释放单个变量
    int* p = new int;
    *p = 10;
    std::cout << "动态分配的整数值: " << *p << std::endl;
    delete p;

    // 分配和释放数组
    int* arr = new int[5];
    for (int i = 0; i < 5; ++i) {
        arr[i] = i * 2;
    }
    std::cout << "动态分配的数组: ";
    for (int i = 0; i < 5; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    delete[] arr;

    return 0;
}

注意事项
内存泄漏:如果忘记使用delete释放通过new分配的内存,会导致内存泄漏,程序会消耗越来越多的内存。
重复释放:不能对同一块内存使用delete多次,这会导致未定义行为。
空指针:对空指针使用delete是安全的,不会产生任何效果。
匹配:对于单个对象使用delete,对于数组使用delete[],不匹配的释放方式会导致未定义行为。
示例:避免内存泄漏

#include <iostream>

void memoryLeakExample() {
    int* leak = new int[10];  // 没有释放内存,导致内存泄漏
}

void properMemoryManagement() {
    int* noLeak = new int[10];
    // 正确的内存释放
    delete[] noLeak;
}

int main() {
    memoryLeakExample();
    properMemoryManagement();

    return 0;
}

总结
动态内存分配通过new和delete操作符可以灵活地管理内存,提高程序的灵活性和效率。然而,需要小心避免内存泄漏和未定义行为,确保每个new都有对应的delete来释放内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值