在 C++ 中,new
操作符用于在动态内存(heap)上为对象动态分配内存,同时会调用对象的构造函数进行初始化。它返回一个指向新分配的内存空间的指针。
new
操作符的一般语法如下:
cppCopy codenew type
new type[expression]
其中,type
是要分配内存的数据类型,expression
是一个表示要分配的对象数量的表达式。
1. 单个对象的动态内存分配:
cppCopy code
int *p = new int; // 动态分配一个整数的内存
上述语句将在堆上分配足够的内存以存储一个整数,并将 p
指向这块内存。
2. 数组的动态内存分配:
cppCopy code
int *arr = new int[5]; // 动态分配一个包含5个整数的数组的内存
上述语句将在堆上分配足够的内存以存储包含5个整数的数组,并将 arr
指向这块内存。
3. 对象的动态内存分配:
cppCopy codeclass MyClass {
// 类的定义
};
MyClass *obj = new MyClass; // 动态分配一个 MyClass 对象的内存
上述语句将在堆上分配足够的内存以存储一个 MyClass
对象,并将 obj
指向这块内存。同时,会调用 MyClass
的构造函数进行对象的初始化。
4. 动态分配后要注意释放内存:
使用 new
操作符分配的内存需要手动释放,否则可能会导致内存泄漏。释放内存使用 delete
操作符(或 delete[]
操作符,如果是数组)。
cppCopy codedelete p; // 释放动态分配的单个整数的内存
delete[] arr; // 释放动态分配的整数数组的内存
delete obj; // 释放动态分配的 MyClass 对象的内存
注意: C++11 引入了智能指针(std::unique_ptr
和 std::shared_ptr
),它们可以更安全地管理动态内存,因为它们会在超出作用域时自动释放分配的内存,无需显式调用 delete
。