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

在C++中,动态创建对象和正确释放内存是管理资源的关键部分。使用
new操作符可以在堆上分配内存,创建对象;而
delete操作符则用于释放这些内存,防止内存泄漏。
动态创建对象(new)
使用
new可以在程序运行时动态地创建对象。它会分配足够的内存来存储对象,并调用构造函数初始化对象。 示例:
MyClass* obj = new MyClass();
这行代码做了两件事:
- 在堆上为
MyClass对象分配内存
- 调用
MyClass的默认构造函数进行初始化
也可以传递参数给构造函数:
MyClass* obj = new MyClass(10, "test");
立即学习“C++免费学习笔记(深入)”;
释放内存(delete)
每当使用
new创建对象后,必须使用
delete来释放内存,否则会导致内存泄漏。 示例:
delete obj;
这行代码会:
- 调用对象的析构函数
- 释放堆上的内存
注意:每个
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++代码的基础。










