怎么在類中創(chuàng)建構造函數(shù) 什么情況下用構造函數(shù)法?
什么情況下用構造函數(shù)法?有兩種情況,假設類名是CTest,構造函數(shù)是默認構造函數(shù)。一個是創(chuàng)建本地對象時,CTest c;//此時會自動調用構造函數(shù)。一個是在堆上用new運算符分配對象時,CTest *
什么情況下用構造函數(shù)法?
有兩種情況,假設類名是CTest,構造函數(shù)是默認構造函數(shù)。一個是創(chuàng)建本地對象時,CTest c;//此時會自動調用構造函數(shù)。一個是在堆上用new運算符分配對象時,CTest * pnew CT
C new和delete是如何調用構造函數(shù)和析構函數(shù)的?
在C中,你可能經(jīng)常使用new和delete來動態(tài)申請和釋放內存,但是你有沒有想過下面這些問題?
是新增和刪除功能。
新增[]和刪除[]是什么?你什么時候使用它們?
你知道運算符new和運算符delete嗎?
為什么new []中的數(shù)組有時會被delete釋放,有時不會?
…
如果你對這些問題有什么疑問,不妨看看我的文章。
新增和刪除的到底是什么?
找工作的同學如果看一些面試的書,相信都會遇到這樣的問題:sizeof不是函數(shù),然后給出一堆理由證明sizeof不是函數(shù)。這里和sizeof一樣,new和delete不是函數(shù),是C定義的關鍵字,可以通過特定的語法形成表達式。與sizeof不同的是,sizeof可以在編譯時確定其返回值,new和delete背后的機制更加復雜。
在你繼續(xù)下去之前,請想一想你認為new應該做什么??赡苣愕牡谝环磻莕ew就像C語言中的malloc函數(shù)一樣,是用來動態(tài)申請空間的。你答對了一半。請看下面的陳述:
string *ps新字符串(hello world)
可以看到new和malloc還是有點區(qū)別的。malloc在申請空間后不會初始化內存,但是new可以。所以new expression背后你要做的事情并沒有你想的那么簡單。在我用例子解釋new背后的機制之前,您需要知道什么是操作符new和操作符delete。
操作員新建和操作員刪除
這兩個其實是C語言標準庫的庫函數(shù),它們的原型如下:
void * operator new(size _ t)//分配一個對象
void *運算符delete(void *)//釋放一個對象電休克療法
void * operator new[](size _ t)//分配一個數(shù)組
void *運算符delete[](void *)//釋放數(shù)組
可以跳過后兩個,以后再介紹。前兩個是C標準庫函數(shù)。你認為這些是功能嗎?請不要。;t懷疑,這就是函數(shù)!在C Primer這本書里說這不是new和delete的重載表達式(比如operator是重載運算符),因為new和delete的重載是不允許的。但是我沒有。;我不明白為什么我應該使用操作符new和操作符delete,這很令人費解。我們只需要知道它們的意思。這兩個函數(shù)有點像C語言中的malloc和free函數(shù),都是用來申請和釋放內存的,而運算符new在申請內存后并不初始化內存,而是直接返回申請內存的指針。
我們可以在程序中直接使用這些函數(shù)。
新建和刪除背后的機制
知道了以上兩個函數(shù),我們用一個例子來解釋new和delete背后的機制:
我們不。;t使用簡單的C內置類型作為示例,但是使用更復雜的類類型來定義類A:
{
public:
:風險值
{
fopen_s(ampfile,測試