㈠ c++中delete的用法
"C++內存管理不同方式分析C++迭代器基本內容講述C++淺拷貝具體內容講述C++回調函數代碼示例解讀C++二維數組new幾種應用方法點評
new和C++ delete運算符用於動態分配和撤銷內存的運算符
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 類型 [初值]
C++ delete用法:
1. int *a = new int;
delete a; //釋放單個int的空間
2.int *a = new int[5];
delete [] a; //釋放int數組空間
要訪問new所開辟的結構體空間,無法直接通過變數名進行,只能通過賦值的指針進行訪問.
用new和C++ delete可以動態開辟,撤銷地址空間.在編程序時,若用完一個變數(一般是暫時存儲的數組),下次需要再用,但卻又想省去重新初始化的功夫,可以在每次開始使用時開辟一個空間,在用完後撤銷它."
㈡ 為什麼說c++不安全呢,面試題,求大神
有指針,有 delete[], 沒有類型安全概念,這是不安全的最大因素。。。
C++和C是不要求類型安全的,甚至編輯器都不報錯。。。。比如 A,和B無繼承關系,但A*可以強制轉化為 B*。。。。
指針是最大的不安全因素,delete[]的存在說明沒有很好的內存管理,沒有垃圾回收機制,容易內存泄露。。。
主要是野指針和內存泄露。。。
還有些情況,比如 兩個函數都使用一個對象B, 如果第一個函數把B給delete[]了,第二個函數就可能導致程序崩潰,因為他不知道該對象不存在了。。。仍然會使用,安全的語言不存在delete[] ,對象不用釋放(甚至根本沒析構函數)。。 如果第一個函數不用只用吧引用變數釋放掉即可,對象B仍然存在,第二個函數照常使用過。。。
其實所謂的安全點的語言無非就是不用釋放任何東西亦不擔心內存泄露,這個確實很爽,但由於各種類型安全問題,讓你寫代碼很憋屈。。。比如一個簡單的函數指針在C和C++直接賦值就完了,short[] 轉byte[]之類的也是直接賦值指針,很方便,但有類型安全,你會覺得要繞好大一圈,來使用類型安全相關的內容,比如C#無非就是個函數回調嘛,給個指針就完了,。。。java需要創建個介面,或者直接創建個類,也要實例化。。。蛋疼的要死,C#必須用託管(無非比介面方便些,但本質沒啥區別),但類型安全確實能讓你BUG量減少,很多程序一打內存泄露,野指針你連地方都不好找。。。