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

2021-07-22 04:09:48 字數 986 閱讀 4386

table of contents

問題1:能不能在建構函式中呼叫其他建構函式

注意問題2:在類外,能不能顯式呼叫建構函式。

問題3:能否顯式呼叫析構函式

問題4:為什麼能夠顯式呼叫析構函式而不能夠顯式呼叫建構函式

問題5:顯式呼叫後有什麼問題

placementnew 用處

使用placementnew怎麼解決析構以及釋放記憶體

問題1:能不能在建構函式中呼叫其他建構函式

c++03

不能。

c++11

能。(初始化列表)

例子:123

4567

891011

1213

1415

1617

1819

class

bb()

b(double b2) : b(3) {}

};int main()

其中,上面程式用

c++03

編譯不通過,提示沒有相應基類(

7行)。

用c++11

編譯通過,執行結果是:

59.88131e-324

3也就是在

c++11

中可以通過這種方式在初始化列表中使用其他建構函式。

注意不管是不是

c++11

,在建構函式體中呼叫其他建構函式都相當於構建了乙個臨時物件,對本身沒有任何影響。

問題2:在類外,能不能顯式呼叫建構函式。

只能夠通過

placement

new。

a *pa = (a *)malloc(sizeof(a));

pa = new (pa) a;   

pa->~a();

free

(pa);

問題3:能否顯式呼叫析構函式

能,如上。問題4

:為什麼能夠顯式呼叫析構函式而不能夠顯式呼叫建構函式

不知道

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

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