Effective C++ 第十七條 Store newed objects in smart pointer in stand

以獨立語句將 newed 對象置入智能指針
????????在之前的學習中,我們知道智能指針的使用可以在構(gòu)造的時候使用 new .
????????但有的時候,我們也許不僅僅是只創(chuàng)建一個智能指針對象,還會同時使用其他語句
????????在 fun 執(zhí)行之前要申請資源 new int ,構(gòu)造 shared_ptr 還要調(diào)用 getNum ,這個順序又編譯器決定,有可能先執(zhí)行 getNum,也有可能先執(zhí)行new int 、shared_ptr 的構(gòu)建(new int 一定在 ?shared_ptr 構(gòu)造函數(shù)之前)??紤]到一種情況,順序如下
申請資源 new int
執(zhí)行 getNum
構(gòu)建 shared_ptr
????????第一步執(zhí)行成功,第二步出問題,導致程序異常退出,此時尚未構(gòu)建 shared_ptr,new int 申請的資源并沒有相應(yīng)的析構(gòu)函數(shù)來釋放,也就是會造成錯誤。也許編譯器不是按這個順序來的,但是我們要考慮到。所以保險的措施是將構(gòu)建 shared_ptr 和 執(zhí)行 getNum 單獨執(zhí)行。
這樣 shared_ptr 一定會先被構(gòu)建完成再調(diào)用 getNum,也就不會出現(xiàn)上述問題。
標簽: