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

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











