一、動態內存分配
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-hant/n/333128.html