41.简单说一下noexecpt关键字
在內(nèi)存資源管理中,有拷貝構(gòu)造函數(shù)和移動(dòng)構(gòu)造函數(shù)。
有的時(shí)候,拷貝會(huì)比移動(dòng)更加浪費(fèi)資源,消耗性能。你比如說,vector,當(dāng)我們的vector不夠空間讓我們push_back的時(shí)候,它的內(nèi)部機(jī)制會(huì)重新開辟一塊內(nèi)存,將原來的元素拷貝進(jìn)新的大的內(nèi)存,然后銷毀之前的vector內(nèi)存,這樣一來的話就出現(xiàn)了拷貝后又銷毀的情況。那樣多浪費(fèi)系統(tǒng)資源啊,拉低性能。
所以呢,既然拷貝后還要銷毀原來的內(nèi)存,那我直接把原來的元素移動(dòng)到新的內(nèi)存中不就行了!yes! C++就提供了這樣的機(jī)制。
那就是移動(dòng)構(gòu)造函數(shù)!
在使用我們自定義的移動(dòng)構(gòu)造函數(shù)的時(shí)候,可能會(huì)有異常情況出現(xiàn)。比如說移動(dòng)部分元素到新的內(nèi)存拋出異常后,新內(nèi)存元素可能尚不存在了,舊內(nèi)存的元素發(fā)生了改變。那么就不能滿足vector自身元素保持不變的要求。而使用拷貝的話,就沒有這種情況啊,新內(nèi)存元素不存在,但是舊內(nèi)存元素完好無損啊。
因此,系統(tǒng)給我們的默認(rèn)是,如果沒有明確告知系統(tǒng),移動(dòng)操作不會(huì)拋出異常,那么系統(tǒng)默認(rèn)會(huì)調(diào)用拷貝構(gòu)造函數(shù)。
因此,我們在定義移動(dòng)構(gòu)造函數(shù)的時(shí)候一般都會(huì)加上noexecpt 關(guān)鍵字。表示告知系統(tǒng),此移動(dòng)構(gòu)造函數(shù)不會(huì)拋出異常!
總結(jié)
以上是生活随笔為你收集整理的41.简单说一下noexecpt关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 处理被中断的系统调用
- 下一篇: 42.移动构造函数的合成规则