C++中的析構(gòu)函數(shù)會在以下幾種情況下自動調(diào)用:
當(dāng)一個(gè)對象的生命周期結(jié)束時(shí),它的析構(gòu)函數(shù)會自動調(diào)用。對象的生命周期通常在以下幾種情況下結(jié)束:
delete
關(guān)鍵字)。當(dāng)使用智能指針(如std::unique_ptr
、std::shared_ptr
等)管理對象時(shí),當(dāng)智能指針超出作用域或被重置時(shí),它們所指向的對象會自動銷毀,其析構(gòu)函數(shù)也會被調(diào)用。
當(dāng)使用std::vector
、std::list
、std::map
等容器時(shí),當(dāng)容器對象超出作用域或被銷毀時(shí),容器中的所有元素會自動銷毀,它們的析構(gòu)函數(shù)也會被調(diào)用。
當(dāng)使用std::thread
創(chuàng)建線程時(shí),當(dāng)線程函數(shù)執(zhí)行完畢后,線程對象會自動銷毀,其析構(gòu)函數(shù)也會被調(diào)用。
需要注意的是,如果對象是通過new
關(guān)鍵字在堆上分配的,那么在銷毀該對象時(shí),需要手動調(diào)用delete
來釋放內(nèi)存。在這種情況下,對象的析構(gòu)函數(shù)不會自動調(diào)用。為了避免內(nèi)存泄漏,建議使用智能指針來管理動態(tài)分配的對象。