new和delete是C++手动管理堆内存的操作符,new分配内存并调用构造函数,delete释放内存并调用析构函数;必须严格配对,否则引发未定义行为;推荐优先使用智能指针和RAII避免内存泄漏。

c++ new和delete怎么用 详解c++动态内存分配和释放【避免内存泄漏】

new 和 delete 是 C++ 中手动管理堆内存的核心操作符,用对了能灵活控制对象生命周期,用错了就容易导致内存泄漏、重复释放或访问已释放内存等严重问题。

new:在堆上分配内存并调用构造函数

使用 new 会在程序运行时从堆(heap)申请内存,并自动调用对应类型的构造函数:

注意:new 可能抛出 std::bad_alloc 异常(除非加 nothrow 版本),所以关键逻辑中建议处理异常或用 new(std::nothrow) 检查返回是否为 nullptr

delete:释放内存并调用析构函数

delete 必须与 new 配对使用,它会先调用对象的析构函数,再把内存归还给系统:

释放后指针不会自动变为空,建议手动置 nullptr(如 delete p; p = nullptr;),避免后续误用。

常见错误和如何避免内存泄漏

内存泄漏本质是:分配了内存,却始终没有 delete(或 delete[])它。典型场景包括:

最稳妥的解法不是靠人记住配对,而是用 std::unique_ptrstd::shared_ptr。例如:auto p = std::make_unique(42);,离开作用域自动释放,彻底规避泄漏风险。

替代方案优先级推荐(现代 C++ 实践)

除非有明确理由(如性能敏感、与 C 接口交互、自定义内存池),否则应避免裸 new/delete

裸 new/delete 不是不能用,而是容易错;而智能指针和容器让正确性变成默认行为。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。