顯式呼叫建構函式及臨時物件

2021-06-25 12:04:04 字數 679 閱讀 1489

在讀 google protocol buffer 的原始碼時發現乙個段很晦澀的**(stubs/common.h):

::google::protobuf::internal::logfinisher() =   \

::google::protobuf::internal::logmessage(::google::protobuf::loglevel_##level, __file__, __line__)

logfinisher 和 logmessage 都是類名,logfinisher 過載了 "=" 運算子,也就是說,這裡是

顯式呼叫建構函式,而且建立的物件都是

臨時物件,這段**實際上是把物件當函式用,因為走完這行,物件就銷毀了,功能跟函式式類似的,只不過比普通函式多了一些特性,比如自動析構。

下面來看一下臨時物件的生命週期:

#include using namespace std;

class ctest

~ctest()

};int main()

輸出結果:

constructor

desctructor

end

說明走完那一行,物件就銷毀了,而不是 main() 函式結束時銷毀的。

顯式呼叫建構函式

class的建構函式,是在生成物件例項時系統自動呼叫的,一般來講開發著一般不能直接呼叫建構函式。但是在某些特殊用法下開發人員需要呼叫建構函式來完成,物件例項的生成。例如 在memory pool程式設計中,預先申請一塊大的普通記憶體,在使用過程中需要將其中的一小塊轉換為乙個物件例項,在這種場景下就需...

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

今天跟同事聊天,他說到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 這個是...