程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++中new和delete操作符用法

c++中new和delete操作符用法

編輯:關於C++

c++中new和delete操作符用法。本站提示廣大學習愛好者:(c++中new和delete操作符用法)文章只能為提供參考,不一定能成為您想要的結果。以下是c++中new和delete操作符用法正文


“new”是C++的一個症結字,同時也是操作符。當我們應用症結字new在堆上靜態創立一個對象時,它現實上做了三件事:取得一塊內存空間、挪用結構函數、前往准確的指針。固然,假如我們創立的是簡略類型的變量,第二步就會被省略。

new用法:

1. 開拓單變量地址空間

1)new int;
開拓一個寄存數組的存儲空間,前往一個指向該存儲空間的地址.int *a = new int 即為將一個int類型的地址賦值給整型指針a. 

2)int *a = new int(5) 感化同上,然則同時將整數賦值為5

2. 開拓數組空間
一維: int *a = new int[100];開拓一個年夜小為100的整型數組空間
二維: int **a = new int[5][6]
三維及其以上,依此類推.

普通用法: new 類型 (初值)

delete用法:

1. int *a = new int;
delete a;   //釋放單個int的空間

2.int *a = new int[5];
delete [] a; //釋放int數組空間

要拜訪new所開拓的構造體空間,沒法直接經由過程變量名停止,只能經由過程賦值的指針停止拜訪

C++  new 運算符與 delete 運算符

到今朝為止,您都是事前界說好所要應用的變量,當法式開端履行時,這些變量就會主動被設置裝備擺設內存空間。
 但是有時有些變量其實不曉得什麼時候會被應用,您願望在應用到的時刻再設置裝備擺設空間給變量,並在變量不應用的時刻,將變量所占領的空間還給內存,這時候候我們可使用new運算符與delete運算符。

舉個簡略的例子來講,您可以在法式中以靜態的方法來設置裝備擺設一個int類型年夜小的內存,例如:
int *ptr = new int;

在這段法式中,new運算符會設置裝備擺設一個int所須要的空間,並傳回該空間的地址,所以您應用指針ptr來貯存這個地址,這段法式只設置裝備擺設空間但不初始化空間中的貯存值,假如要在設置裝備擺設完成後指定貯存值,則可以如斯界說:
int *ptr = new int(100);

這段法式在設置裝備擺設空間以後,會將空間中的貯存值設定為100
履行成果:
空間地位:0x3d2458
空間貯存值:100
空間地位:0x3d2458
空間貯存值:200

應用new運算符靜態設置裝備擺設的空間,在全部法式停止前其實不會主動清償給內存,您必需應用delete將這個空間還給內存,如下面的法式在停止前所作的舉措,在這個法式中,固然顯示終了後法式也就停止,但這邊照樣示范delete的用法,並且這也是個好習氣,往後您的法式在連續履行進程中若年夜量應用new而沒有恰當的應用delete的話,因為空間一向沒有清償,最初將招致全部內存空間用盡。

異樣的,應用new設置裝備擺設得來的數組空間,在不應用時也應當應用delete清償給內存,辦法以下:
delete [] arr;

留意在應用delete清償數組空間給內存時,我們必需加上[ ],表現清償的是全部數組空間。


//以下應用一個簡略的法式來示范堆的靜態內存設置裝備擺設和應用

#include <iostream>
using namespace std;

int main() {
 int *ptr = new int(100);

 cout << "空間地位:" << ptr<< endl;
 cout << "空間貯存值:" << *ptr<< endl;

 *ptr = 200;

 cout << "空間地位:" << ptr<< endl;
 cout << "空間貯存值:" << *ptr<< endl;

 delete ptr;

 return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved