C++ 中有等价的 realloc 吗

作者:编程家 分类: c++ 时间:2025-05-10

C++ 中有等价的 realloc 吗?

在 C++ 中,有一种类似于 realloc 的函数可以用来重新分配内存空间,那就是使用 new 和 delete 运算符。这两个运算符可以用来动态分配和释放内存空间,类似于 C 语言中的 malloc 和 free 函数。

使用 new 运算符可以动态地分配内存空间,并返回所分配内存的指针。而使用 delete 运算符可以释放通过 new 运算符分配的内存空间。

下面是一个简单的例子,演示了如何使用 new 和 delete 运算符来动态分配和释放内存空间:

cpp

#include

int main() {

int *ptr = new int; // 动态分配一个 int 类型的变量空间

*ptr = 10; // 赋值

std::cout << *ptr << std::endl; // 输出变量的值

delete ptr; // 释放内存空间

return 0;

}

使用 new 和 delete 运算符动态分配和释放数组

除了可以动态分配和释放单个变量的内存空间外,new 和 delete 运算符还可以用于动态分配和释放数组的内存空间。

下面是一个示例,演示了如何使用 new 和 delete 运算符来动态分配和释放数组的内存空间:

cpp

#include

int main() {

int size;

std::cout << "请输入数组的大小:";

std::cin >> size;

int *ptr = new int[size]; // 动态分配一个大小为 size 的 int 类型数组

for (int i = 0; i < size; i++) {

ptr[i] = i; // 赋值

}

for (int i = 0; i < size; i++) {

std::cout << ptr[i] << " "; // 输出数组的元素

}

std::cout << std::endl;

delete[] ptr; // 释放内存空间

return 0;

}

在这个示例中,用户可以输入一个整数作为数组的大小。然后使用 new 运算符动态分配一个大小为 size 的 int 类型数组,并使用循环为每个元素赋值。最后,使用 delete[] 运算符释放内存空间。

使用 realloc 函数

值得注意的是,在 C++ 中,并没有直接等价于 realloc 函数的运算符或函数。realloc 函数在 C 语言中用于重新分配内存空间,可以扩展或缩小已分配的内存块。

在 C++ 中,我们可以使用 new 和 delete 运算符来模拟 realloc 函数的功能。具体的做法是,先使用 new 运算符分配一个新的内存空间,将原内存空间的内容拷贝到新的内存空间中,然后使用 delete 运算符释放原内存空间。

下面是一个简单的例子,演示了如何使用 new 和 delete 运算符来模拟 realloc 函数的功能:

cpp

#include

#include

int main() {

int *ptr = new int[5]; // 动态分配一个大小为 5 的 int 类型数组

for (int i = 0; i < 5; i++) {

ptr[i] = i; // 赋值

}

int *newPtr = new int[10]; // 动态分配一个大小为 10 的 int 类型数组

std::memcpy(newPtr, ptr, 5 * sizeof(int)); // 将原数组的内容拷贝到新数组中

delete[] ptr; // 释放原数组的内存空间

ptr = newPtr; // 将新数组的指针赋值给原数组的指针

for (int i = 5; i < 10; i++) {

ptr[i] = i; // 赋值

}

for (int i = 0; i < 10; i++) {

std::cout << ptr[i] << " "; // 输出数组的元素

}

std::cout << std::endl;

delete[] ptr; // 释放新数组的内存空间

return 0;

}

在这个示例中,首先使用 new 运算符动态分配一个大小为 5 的 int 类型数组,并为每个元素赋值。然后,使用 new 运算符再次动态分配一个大小为 10 的 int 类型数组。接下来,使用 std::memcpy 函数将原数组的内容拷贝到新数组中,并使用 delete[] 运算符释放原数组的内存空间。最后,将新数组的指针赋值给原数组的指针,并为新数组的后五个元素赋值。最终,输出新数组的所有元素。

通过使用 new 和 delete 运算符,我们可以在 C++ 中模拟 realloc 函数的功能,实现动态地重新分配内存空间的效果。