1. 程式人生 > >new和delete、malloc和free之間的異同點以及用法例項

new和delete、malloc和free之間的異同點以及用法例項

/*
malloc和free    new和delete  兩大類之間的<strong><span style="font-size:18px;">根本區別</span></strong>
1.malloc和free是屬於c語言範疇的,而new和delete是屬於c++範疇的。
2.malloc不能給物件進行初始化,而new可以給物件進行初始化。
3.new和delete會自動呼叫類的建構函式和解構函式,而malloc和free不會呼叫。
4.malloc和delete、new和free 可以混搭,但不建議這樣用,因為會造成程式碼不方便管理,並且會造成物件無法呼叫解構函式而出錯,比如使用new 和 free,如果類裡開闢了一段新空間,如果無法呼叫解構函式,那麼這段空間就會浪費點。
*/

#include "stdafx.h"
#include <iostream>

using namespace std;

class Test{
public:
	Test(int _a){
		a = _a;
		cout << "建構函式被執行" << endl;
	}
	~Test(){
		cout << "解構函式被執行" << endl;
	}
private:
	int a;
};
int main()
{
	//malloc 和 free 以及new 和 delete 用法說明
	//1.基礎資料型別的動態建立和釋放
	int *p = (int *)malloc(sizeof(int));
	*p = 1;
	free(p);
	int *p = new int;
	*p = 2;
	delete p;
	//2.陣列的動態建立和釋放
	int *p = (int *)malloc(10*sizeof(int));// 相當於int p[10]
	p[0] = 10;
	cout << p[0] << endl;
	free(p);
	int *p2 = new int[10];
	p2[0] = 11;
	delete[]p2;
	//2.類的物件的動態建立和釋放
	Test *t1 = (Test *)malloc(sizeof(Test));
	free(t1);

	Test *t2 = new Test(12);//初始化
	delete t2;
	//結論:可發現 new 和 delete 會呼叫建構函式和解構函式 而malloc 和 free 不會呼叫!
	return 0;
}

相關推薦

newdeletemallocfree之間異同以及用法例項

/* malloc和free new和delete 兩大類之間的<strong><span style="font-size:18px;">根本區別</span></strong> 1.malloc和free是屬於c語

newdeletemallocfree 轉自http://www.kuqin.com/effectivec2e/ch01a.htm

條款3:儘量用new和delete而不用malloc和free malloc和free(及其變體)會產生問題的原因在於它們太簡單:他們不知道建構函式和解構函式。 假設用兩種方法給一個包含10個string物件的陣列分配空間,一個用malloc,另一個用new: stri

deletedelete[ ]exitreturn

delete和delete[ ] 在C++中,申請堆上空間有著兩種方式new和new[ ],new是用來申請單個元素空間,new[ ]是申請存放多個元素的連續空間。 空間申請方式的不同對應著空間釋放的方式也不同,教材上說new和new[ ]分別對應著delete和delete[ ]

newdeletemallocfree用法心得

這裡主要講一下,我總結的一些記憶體相關問題問題。 1)Opencv 中IplImage 的賦值問題。請看下面程式碼: IplImage* img1 = NULL; IplImage* img2 = NULL; img1 = cvLoadImage("testImg.jpg"

new/deletemalloc/free 的區別

標準庫函數 class 字節數 定義 自動釋放 nbsp 知識 策略 用途 相同點 1、都可以動態的申請或釋放內存 2、存儲方式相同,動態申請的內存都存放在堆中,無法自動釋放,要調用對應的delete和free 區別 1、new能自行的計算需要分配的空間,malloc需

newmallocalloctor關係

今天看C++primer,看到了動態記憶體管理類,alloctor,也涉及到free,對此有些不清楚,故收集整理一下,理清知識點。 http://blog.sina.com.cn/s/blog_9054a0360101289p.html 首先來說new和malloc。 n

linux下brkmmapmallocnew的區別

答:brk是系統呼叫,主要工作是實現虛擬記憶體到記憶體的對映,可以讓程序的堆指標增長一定的大小,邏輯上消耗掉一塊虛擬地址空間,malloc向OS獲取的記憶體大小比較小時,將直接通過brk呼叫獲取虛擬地址。 mmap是系統呼叫,也是實現虛擬記憶體到記憶體的對映,可以讓程序

jQuery中focusin()focus()find()children()的差別

nes jquery ams rip 1.4 fadein ++ display his jQuery中focus()和focusin()、focus()和children()的差別 focus()和focusin() focus()和focusin

python中sorted.sorted reversedreverse的使用

訪問 seq bject soft time mes lse new 一個 #encoding = utf-8 list = [1,8,3,6] print(list.sort()) #Noneprint(list)#[1,3,6,8]print(sorted(list))

Collection與CollectionsArrayListVectorHashMapHashtable(面試常用)

Collections與Collection 1. Collections是java.util下的類,它包含有各種有關集合操作的靜態方法2. Collection是java.util下的介面,它是各種集合結構的父介面   ArrayList和Vector1. 同步性: Vector是執行緒安全

js--日期Math陣列物件API

一、日期 Date.now() //獲取當前時間毫秒數,從1970年到現在的毫秒數 var dt =new Date() dt.getTime() //獲取毫秒數 dt.getFullYear() //年 dt.getMonth() //月(0-11) dt.ge

C#學習( refout列舉)

一、值型別和引用型別 1、值型別直接儲存其值,而引用型別儲存對其值的引用。 引用型別:基類為Objcet 值型別:均隱式派生自System.ValueType 2、值和引用型別儲存 值型別變數聲明後,不管是否已經賦值,編譯器為其分配記憶體。 引用型別當宣告一個類

Spannable EditableSpannableString SpannableString

Spanned(可附加標記的字元序列) ** * This is the interface for text that has markup objects attached to * ranges of it. Not all text classes

python-同步非同步阻塞非阻塞序列並行並行併發密集型執行緒程序的相關概念

1. 同步和非同步   關注的是訊息的通訊機制,描述的是一種行為方式,是多個任務之間的關係。 ① 同步: 呼叫者主動等待被呼叫方返回結果,在沒有返回結果之前,就一直專職等待。 千萬不要把計算機中“同步”理解成“同時執行”。 ② 非同步:呼叫者傳送請求請求,不會專職等待

有關C語言的列舉型別gotobreakcontinue語句

有關C語言的列舉型別和goto、break和continue語句 今天我們首先來看一下列舉型別,因為這個真的很容易讓人忘記,感覺平常都用不上的角色,所以今天特意將它拿出來講解一下 首先我們看一下列舉的一般用法 typedef enum { sun = 1, mon=2,

(Java) ---- Eclipse快捷鍵文件註釋製作生成匯入jar包

【Eclipse快捷鍵】 (1)ctrl+T  檢視類的繼承樹。 (2)Ctrl+點選類名或者方法名,來檢視原始碼。 JDK (JRE(JVM,執行時所需要的核心類庫),開發工具(javac...)) 【Java中文件的註釋和製作】 /** + 回車(Enter

asyncawaitTask執行緒池執行緒的關係

計算機進入多核時代,開發人員想要充分利用計算機核心,需要編寫多執行緒程式。執行緒屬於程序,理想狀態下,在4核的計算機上最好有4個執行緒。 早期的執行緒建立是利用 Thread類,執行緒的建立需要花費很多時間,基於此,微軟公司為開發人員建立了執行緒池,執行緒池具有智慧爬山演算法,可以 根據執行

mongodb java增刪該查模糊排序分頁查詢

package mongodb; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.regex.Pattern; import com.mong

CSS中常見屬性盒子定位

一、CSS中常見屬性和值 1、字型屬性 1> 字型家族:font-family  (宋體、楷體...) 2> 字型風格:font-style    (normal普通、italic斜體) 3> 字型大小:font-size 4> 字型加粗:font-weight:bold 2、控制文

java中類元件方法事件的辨析

主要來源於網上資料的總結 1、類 Class  元件Component 元件對外暴露一個或多個介面,供外界呼叫。元件內部由多個類來協同實現指定的功能。對於複雜的元件,會包括很多類,還可能包含配置檔案、介面、依賴的庫檔案等,元件也可以包含或者使用其他的元件,構成更大粒度的