鍍金池/ 問(wèn)答/Python  C++  Linux/ C++ 關(guān)于運(yùn)行時(shí) 和 編譯時(shí) 的問(wèn)題

C++ 關(guān)于運(yùn)行時(shí) 和 編譯時(shí) 的問(wèn)題

C++ 所說(shuō)的編譯時(shí)期確定 和 運(yùn)行時(shí)期確定 我該怎么理解 ,
繼承的靜態(tài)類型 和 動(dòng)態(tài)類型還挺好理解的 , 靜態(tài)類型編譯時(shí)期確定 , 動(dòng)態(tài)類型運(yùn)行時(shí)確定 。
而到了 關(guān)于 unique_ptr 和 shared_ptr 的講解的時(shí)候 , shared_ptr 通過(guò)第二個(gè)參數(shù)傳入自定義的刪除調(diào)用對(duì)象的 , 說(shuō)是運(yùn)行時(shí)的時(shí)候才會(huì)跳轉(zhuǎn)到指定的代碼運(yùn)行 ,
而unqiue_ptr 使用的是模板參數(shù) , 雖然類型是在編譯時(shí)期確定 , 但是也需要傳入的第二個(gè)參數(shù)是個(gè)調(diào)用對(duì)象 , 不也是需要運(yùn)行時(shí)才會(huì)跳轉(zhuǎn)到指定的代碼運(yùn)行么 ,
primer里面為什么說(shuō) shared_ptr 是運(yùn)行時(shí) , 而unqiue 是編譯的時(shí)候呢 ?

我發(fā)現(xiàn)primer到了16章往后走都很難了 , 前面感覺(jué)還沒(méi)有什么難度。

回答
編輯回答
尛曖昧

主要原因就是unique_ptrshared_ptr更輕,沒(méi)有運(yùn)行時(shí)負(fù)擔(dān),所以unique_ptr的刪除器是編譯期確定的。

兩個(gè)unique_ptr即使指向類型相同,若刪除器不同,也屬于不同類型。unique_ptr的刪除器已經(jīng)內(nèi)植于類型,所以不需要存儲(chǔ)一個(gè)刪除器對(duì)象就知道刪除器在哪?!邦愋蛢?nèi)植”過(guò)程是編譯期確定的,刪除過(guò)程的代碼的運(yùn)行當(dāng)然是運(yùn)行期運(yùn)行的。

shared_ptr就不同,構(gòu)造函數(shù)傳進(jìn)來(lái)一個(gè)實(shí)實(shí)在在的對(duì)象,它存儲(chǔ)起來(lái)用?!皩?duì)象存儲(chǔ)”過(guò)程是運(yùn)行期確定的,刪除過(guò)程的代碼的運(yùn)行當(dāng)然也是運(yùn)行期運(yùn)行的。shared_ptr的靈活性更高。

2017年12月2日 02:52