c 在定義各種種類物件的時候分配記憶體的時機

2021-06-29 06:53:05 字數 1020 閱讀 7684

1、所有型別,只宣告的時候都不分配記憶體。 直接使用編譯器會報錯,如輸出操作這種。

2、值型別和string型別,在執行"="運算子的時候,這個運算子的過載函式會給左邊的運算元重新申請一塊記憶體,因此,若左運算元之前沒有分配記憶體,是可以執行=的,而且,這種情況下, 「=」操作符執行的是深拷貝。

3、除了string外的引用型別,未分配記憶體時執行 = 運算子,也都ok,但是這時執行的是淺拷貝。

4、值型別和string型別,在執行  string stra=new string[5];  這個的時候,是給陣列的所有元素分配記憶體的。 而其他引用型別,執行t  ta =new t[5],這個時候,是不給陣列元素分配記憶體的,直接訪問資料元素會報錯,若想在除string外的引用型別的陣列定義的時候給元素分配記憶體,必須 t  ta =new t[5]這樣的形式,大括號內需要有建構函式

5、引用型別定義的時候,使用null來初始化,分兩種情況:

①、string物件,使用null或者string.empty初始化,是分配記憶體的,如string str=null; 之後輸出str,是ok的

②、除string外的其他引用型別,使用null初始化,是不分配記憶體的,對其進行引用,編譯會報錯

測試**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace test14

public myclass(int y)

}class program

;    //這樣就不報錯

console.writeline(mca1[0].x);

//string str;

//報錯

string str = null;

console.writeline(str);     //不報錯,可以執行

//string str=string.empty;

//不報錯,可以執行}}

}

Django查詢資料庫時各種種類的排序

按照entry date從小到大查詢資料,可以寫成 content.objects.order by entry date 從大到小排序 content.objects.order by entry date 下面介紹其他種類的排序 隨機排序 content.objects.order by 但是o...

c 指標(二) 定義變數時的記憶體分配

為什麼要講記憶體分配呢,因為要理解指標的實質,就必須得從理解記憶體開始 1 計算機中記憶體編址 記憶體是乙個存放資料的空間,進行編址之後可以對資料空間進行合理的利用和管理。記憶體編址的基本單位是位元組。2 變數的定義,背後的記憶體分配 int a 當我們定義乙個int型別的變數 a 時,系統就開始準...

C 程式中各種變數的記憶體分配

c 程式中各種變數的記憶體分配 首先可以看下c 程式將記憶體分為幾個區域 1 棧。該記憶體區域一般是由作業系統自動分配的,我們不用考慮刪除問題。函式的引數,函式體中我們定義的變數,一般都是在棧中分配記憶體的。這些記憶體的分配一般在函式呼叫時才分配記憶體 2 堆。堆中分配的記憶體一般是程式設計師自己分...