c++中new和free可以结合使用吗?
如下例,我new一个char数组,使用free释放,会不会造成生成什么安全问题?
代码可以编译运行,谢谢各位大神指点。
char * ch = new char[10]; for (int i = 0; i < 10; i++) { ch[i] = '0' + i; } free(ch);
光阴似箭催人老,日月如移越少年。
new和delete必須成對的使用,不能和malloc|free混合使用,你那麼寫可能對於基本型別是沒有問題的,但是一旦設涉及到構造函數與析構函數就不行了,養成習慣是非常重要的,而且標準庫貌似沒有規定new一定要使用malloc來實現,所以new的東西還是需要delete,而不是free
new
delete
malloc|free
malloc
free
用delete更好
用free有可能new出來的物件未執行析構函數而可能導致程式出錯
不建議這樣使用,還是new/delete ,malloc/free搭配使用
因為C++標準沒有要求new的記憶體分配是由malloc分配的,雖然有些C++實作是這麼做的,但是並不是所有的。而且new運算元是可以重載的,可以寫自訂的記憶體分配程式碼,這種情況肯定不能free。另外對於new的類別對象,不可以呼叫free釋放,因為析構函數不會被呼叫。
首先:new和delete底層使用malloc和free實作的其次:當是基本的資料型別時,delete和delete[]可以混用用free也可以釋放new出的空間,但是new []的有時候就不行重點是最好還是不要混用
new
和delete
必須成對的使用,不能和malloc|free
混合使用,你那麼寫可能對於基本型別是沒有問題的,但是一旦設涉及到構造函數與析構函數就不行了,養成習慣是非常重要的,
而且標準庫貌似沒有規定
new
一定要使用malloc
來實現,所以new
的東西還是需要delete
,而不是free
用
delete
更好用free有可能new出來的物件未執行析構函數而可能導致程式出錯
不建議這樣使用,還是new/delete ,malloc/free搭配使用
因為C++標準沒有要求new的記憶體分配是由malloc分配的,雖然有些C++實作是這麼做的,但是並不是所有的。而且new運算元是可以重載的,可以寫自訂的記憶體分配程式碼,這種情況肯定不能free。另外對於new的類別對象,不可以呼叫free釋放,因為析構函數不會被呼叫。
首先:new和delete底層使用malloc和free實作的
其次:當是基本的資料型別時,delete和delete[]可以混用
用free也可以釋放new出的空間,但是new []的有時候就不行
重點是最好還是不要混用