一、动态内存分配
c++ new主要用于动态内存分配,可以在程序运行时根据需要分配内存空间。使用new创建的变量是存储在堆上,因此不会随着函数的结束而被清除。
下面是一个简单的示例代码:
#include <iostream> using namespace std; int main() { int* ptr = new int; *ptr = 10; cout << "Value of ptr: " << *ptr << endl; delete ptr; return 0; }
上述代码中,使用new创建了一个名为ptr的指针,然后把值10存储在指针所指向的地址中。最后使用delete释放内存。
二、数组的动态内存分配
c++ new同样可以用于数组的动态内存分配。使用new创建的数组同样是存储在堆上,因此不会随着函数的结束而被清除。
下面是一个简单的示例代码:
#include <iostream> using namespace std; int main() { int n = 5; int* arr = new int[n]; for(int i=0; i<n; i++) { arr[i] = i+1; cout << arr[i] << " "; } delete[] arr; return 0; }
上述代码中,使用new创建了一个大小为5的数组,然后在for循环中给每个元素赋值并输出。最后使用delete[]释放内存。
三、类的动态内存分配
c++ new还可以用于类的动态内存分配。使用new创建的类对象同样是存储在堆上,因此不会随着函数的结束而被清除。
下面是一个简单的示例代码:
#include <iostream> using namespace std; class Person { public: string name; int age; void introduce() { cout << "My name is " << name << ", I'm " << age << " years old." <name = "Tom"; ptr->age = 25; ptr->introduce(); delete ptr; return 0; }
上述代码中,使用new创建了一个名为ptr的Person指针,然后给属性赋值并调用introduce函数。最后使用delete释放内存。
四、new传入参数
c++ new除了可以不带参数创建变量、数组、对象外,还可以传入参数,用于给新创建的变量、数组、对象进行初始化。
下面是一个简单的示例代码:
#include <iostream> using namespace std; int main() { // 创建大小为5的int数组,并初始化为0 int* ptr1 = new int[5](); for(int i=0; i<5; i++) { cout << ptr1[i] << " "; } delete[] ptr1; // 创建double类型变量,并初始化为3.14 double* ptr2 = new double(3.14); cout << *ptr2 << endl; delete ptr2; return 0; }
上述代码中,使用new创建了一个大小为5的int数组,并初始化为0;创建一个double类型变量,并初始化为3.14。最后使用delete或delete[]释放内存。
五、自定义new和delete
c++中可以自定义new和delete,来实现动态内存分配的不同需求。例如,可以通过重载类的new和delete函数,实现自己的内存池,提升内存分配效率。
下面是一个简单的示例代码:
#include <iostream> using namespace std; void* operator new(size_t size) { cout << "Allocating memory with size " << size << endl; void* ptr = malloc(size); return ptr; } void operator delete(void* ptr) { cout << "Freeing allocated memory" << endl; free(ptr); } int main() { int* ptr = new int; *ptr = 10; cout << "Value of ptr: " << *ptr << endl; delete ptr; return 0; }
上述代码中,使用了自定义的new和delete函数,用于输出分配内存的大小和释放内存的信息。
总结
本文详细介绍了c++ new的用法,包括动态内存分配、数组的动态内存分配、类的动态内存分配、new传入参数、自定义new和delete。希望本文能够对使用c++进行编程的开发工程师有所帮助。
原创文章,作者:IRQZG,如若转载,请注明出处:https://www.506064.com/n/333128.html