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...