使用new操作符可创建动态对象数组,需类有默认构造函数,数组元素自动初始化,内存用delete[]释放避免泄漏。

在C++中创建动态对象数组,主要通过new操作符在堆上分配内存。这种方式适用于对象数量在运行时才能确定的场景。下面介绍几种常用方式。
使用 new 创建动态对象数组
基本语法是使用new 类名[大小]来创建对象数组。这会调用类的默认构造函数为每个元素初始化。
- 必须确保类有可访问的默认构造函数(无参构造函数)
- 数组中的每个对象都会自动调用构造函数
- 使用完后必须用
delete[]释放内存,避免泄漏
示例代码:
class MyClass {
public:
MyClass() { cout << "构造函数调用\n"; }
~MyClass() { cout << "析构函数调用\n"; }
};
// 创建包含5个MyClass对象的动态数组
MyClass* arr = new MyClass[5];
// 使用数组...
// ...
// 释放内存
delete[] arr;
arr = nullptr;
处理没有默认构造函数的情况
如果类没有默认构造函数,不能直接使用new Type[n]。此时可以考虑以下替代方案:
立即学习“C++免费学习笔记(深入)”;
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。
- 使用
std::vector配合emplace_back或指定构造参数 - 使用定位
new结合原始内存分配(较复杂,不推荐新手使用)
推荐做法:使用 std::vector
#includeclass Person { public: Person(const string& name, int age) : name(name), age(age) {} private: string name; int age; };
// 动态创建对象数组,支持非默认构造 std::vector
people; people.emplace_back("Alice", 25); people.emplace_back("Bob", 30);
注意事项和最佳实践
手动管理动态数组容易出错,建议遵循以下原则:
- 配对使用
new[]和delete[],不要混用delete - 释放后将指针置为
nullptr - 优先使用
std::vector或std::unique_ptr等智能容器 - 避免在多个函数间传递裸指针管理生命周期
基本上就这些。虽然可以用new创建动态对象数组,但现代C++更推荐使用std::vector或智能指针,它们能自动管理内存,减少错误风险。










