C++(new操作符)

发布时间 2023-12-07 16:32:41作者: 做梦当财神

在 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_ptrstd::shared_ptr),它们可以更安全地管理动态内存,因为它们会在超出作用域时自动释放分配的内存,无需显式调用 delete