C++ new用法的個人見解

ZYunfeii發表於2020-10-16

在C++ 中,用new/delete操作符取代malloc/free

  • 申請一個物件:
int * p = new int;

釋放:

delete p;

delete後將記憶體交還給記憶體管理器。
注意:

  1. new 的返回值直接就是物件指標,不用再轉換。
  2. new的時候可以設定初始值
new int(12);
  • 申請多個物件(例如申請1024個int物件)
int * p = new int[1024];

釋放:

delete [] p;
  1. 注意[]指定物件個數。
  2. 如果new的時候用了[],則釋放的時候使用delete []操作符。

eg:

#include<iostream>
using namespace std;

int main()
{
	int* p = new int[1024];
	for (int i = 0; i < 1024; i++)
	{
		p[i] = i + 1;
	}
	cout << p[0] << endl;
	delete [] p;
	return 0;
}

在delete [] p處加斷點除錯,觀察p指向的記憶體,如下圖所示:
在這裡插入圖片描述
觀察到p指向的1024個記憶體地址都已經賦值成功(這裡注意高位高地址小端模式)。

  • new 物件

new一個物件:

Student * stu = new Student;

new多個物件:

Student * stu = new Student[500];
for(int i = 0;i < 500;i ++)
{
	st.[i].id = i + 1;
}

delete 後指標的值其實沒有變,但是可能已經交給其他應用程式使用了。

相關文章