顯式呼叫建構函式

2021-05-21 19:48:11 字數 679 閱讀 7716

class的建構函式,是在生成物件例項時系統自動呼叫的,一般來講開發著一般不能直接呼叫建構函式。

但是在某些特殊用法下開發人員需要呼叫建構函式來完成,物件例項的生成。

例如:在memory pool程式設計中,預先申請一塊大的普通記憶體,在使用過程中需要將其中的一小塊轉換為乙個物件例項,

在這種場景下就需要顯式呼叫建構函式。

定義class aa:

class aa

; virtual ~aa() {};

int geti();

private:

int temp;

};

我們預先申請一塊記憶體:

char * ptr = (char *)malloc(sizeof(aa));

在需要的時候我們需要將ptr轉換成aa的物件例項,如果採用如下方式呼叫:

aa * aa = (aa *)ptr;

那麼class aa的建構函式不會被喚起,則這塊記憶體還不是aa的物件例項。

此時如果作如下操作:aa->geti();

vc6.0環境下不會報錯,但是返回的資料不正確。

則該記憶體我們就不能將其當作aa的例項使用,此時就需要用到顯式構造函式呼叫:

aa * aa = new(ptr)aa();

則aa的建構函式被喚起,完成例項的構造。

顯式呼叫建構函式和析構函式

今天跟同事聊天,他說到stl 原始碼有用到顯示呼叫析構函式。試一了一下。果然能行。include iostream using namespace std class myclass myclass int tmain intargc,tchar argv 結果 constructors destr...

顯式呼叫建構函式和析構函式

stl 原始碼中有用到顯示呼叫析構函式。試一了一下。果然能行。include iostream using namespace std class myclass myclass int tmain intargc,tchar argv 結果 constructors destructors 這個是...

顯式呼叫建構函式和析構函式

今天跟同事聊天,他說到stl 原始碼有用到顯示呼叫析構函式。試一了一下。果然能行。include iostream using namespace std class myclass myclass int tmain intargc,tchar argv 結果 constructors destr...