动态创建对象需用new分配内存并调用构造函数,如MyClass obj = new MyClass(); 释放时用delete调用析构函数并释放内存,如delete obj;创建数组用new[]和delete[],如MyClass arr = new MyClass[5]; delete[] arr;每个new对应一个delete,避免内存泄漏或重复释放;建议使用智能指针或容器自动管理内存。

在C++中,动态创建对象和正确释放内存是管理资源的关键部分。使用
new操作符可以在堆上分配内存,创建对象;而
delete操作符则用于释放这些内存,防止内存泄漏。
动态创建对象(new)
使用
new可以在程序运行时动态地创建对象。它会分配足够的内存来存储对象,并调用构造函数初始化对象。 示例:
MyClass* obj = new MyClass();
这行代码做了两件事:
- 在堆上为
MyClass对象分配内存
- 调用
MyClass的默认构造函数进行初始化
也可以传递参数给构造函数:
MyClass* obj = new MyClass(10, "test");
立即学习“C++免费学习笔记(深入)”;
释放内存(delete)
每当使用
new创建对象后,必须使用
delete来释放内存,否则会导致内存泄漏。 示例:
delete obj;
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。
这行代码会:
- 调用对象的析构函数
- 释放堆上的内存
注意:每个
new都应有且仅有一个对应的
delete。重复释放或忘记释放都会引发问题。
数组的动态创建与释放
如果要创建对象数组,应使用
new[]和
delete[]。 示例:
MyClass* arr = new MyClass[5];
delete[] arr;
关键点:
- 使用
new[]创建数组时,会调用每个元素的构造函数
- 必须用
delete[]释放,不能用
delete,否则行为未定义
- 反之,单个对象不能用
delete[]释放
常见错误与建议
避免以下常见问题:
- 忘记释放内存:导致内存泄漏
- 重复释放:程序崩溃或未定义行为
- 使用已释放的指针:野指针问题
- 混用 new/delete 与 new[]/delete[]:未定义行为
建议:
尽量使用智能指针(如
std::unique_ptr、
std::shared_ptr)或容器(如
std::vector),它们能自动管理内存,减少手动使用
new和
delete的需要。
基本上就这些。掌握
new和
delete的使用规则,理解其背后的资源管理逻辑,是写出安全C++代码的基础。









