一、動態內存分配
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/zh-hk/n/333128.html
微信掃一掃
支付寶掃一掃