一、动态内存分配
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." << endl;
}
};
int main() {
Person* ptr = new Person;
ptr->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++进行编程的开发工程师有所帮助。