C++动态内存分配超详细讲解
什么是动态内存分配
C++中内存的分配共有两种方式:静态内存分配和动态内存分配。其中静态内存分配通常是由编译器完成,而动态内存分配则需要程序员手动完成。动态内存分配可以在程序运行过程中动态地申请和释放内存,从而提高了程序的灵活性。
C++中的动态内存分配
C++中通过new运算符来进行动态内存分配,动态分配的内存需要手动释放,否则将会产生内存泄漏问题。为了避免内存泄漏,C++11还引入了智能指针(smart pointer)的概念。
下面是一个示例,在程序运行时动态地申请一个整型变量的内存,并将其赋值为1。
int *p = new int(1);
在使用完动态分配的内存后,需要手动释放其所占据的内存,否则将会造成内存泄漏。下面是释放动态内存的示例。
delete p;
在delete操作符后面加上[],则可以释放一个动态数组所占据的内存。
int *pa = new int[5];
delete[] pa;
动态内存分配的示例
示例一
下面的示例中,我们动态地申请了长度为10的整型数组,并循环遍历输出其值,最后释放内存。
#include <iostream>
using namespace std;
int main () {
int *ptr = new int[10];
for (int i = 0; i < 10; i++) {
ptr[i] = i + 1;
}
for (int i = 0; i < 10; i++) {
cout << ptr[i] << " ";
}
delete[] ptr;
return 0;
}
示例二
下面的示例中,我们动态地申请一个长度为5的整型数组,并初始化其值。然后再根据实际需要重新申请一个长度为10的数组,并将原先数组的值复制到新数组中,最后释放旧数组,并输出结果。
#include <iostream>
using namespace std;
int main () {
int *ptr = new int[5]{1, 2, 3, 4, 5};
int *newPointer = new int[10];
for (int i = 0; i < 5; i++) {
newPointer[i] = ptr[i];
}
delete[] ptr;
ptr = newPointer;
for (int i = 0; i < 10; i++) {
cout << ptr[i] << " ";
}
delete[] ptr;
return 0;
}
总结
C++中的动态内存分配提高了程序的灵活性,但同时也增加了程序员编程的难度,需要遵循良好的内存管理规范,避免因内存泄漏等问题导致程序的崩溃和异常。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++动态内存分配超详细讲解 - Python技术站