A destruktor virtuális legyen?
Pontszám: 4,2/5 ( 14 szavazat )Ha az alaposztály-destruktor virtuális, akkor az objektumok sorrendben (először származtatott objektum, majd alap) lesznek megsemmisítve. Ha az alaposztály-destruktor NEM virtuális, akkor csak az alaposztályú objektum törlődik (mivel a mutató "Base *myObj" alaposztályú). ... Ezért a destructornak tisztán virtuálisnak kell lennie .
Minden destruktornak virtuálisnak kell lennie?
Minden nyilvánosan örökölt osztálynak, akár polimorf, akár nem, rendelkeznie kell egy virtuális destruktorral. Más szóval, ha rá lehet mutatni egy alaposztály-mutatóval, akkor az alaposztályának virtuális destruktorral kell rendelkeznie. Ha virtuális, akkor a származtatott osztálydestruktort hívják meg, majd az alap osztálydestruktort.
Miért kell virtuálisnak nyilvánítani a destruktort?
A C++ virtuális destruktorait a memóriaszivárgások elkerülésére használják, különösen akkor, ha az osztály nem menedzselt kódot tartalmaz , azaz fájlokhoz, adatbázisokhoz vagy más külső objektumokhoz mutató mutatókat vagy objektumleírókat tartalmaz. A destruktor lehet virtuális.
Mikor nem használna virtuális destruktort?
Milyen esetben NE használjak virtuális destruktorokat? Egy konkrét osztálynak, amely nem akar örökölni . Polimorf deléció nélküli alaposztályhoz. Egyik kliens sem képes polimorf módon törölni a bázisra mutató mutató használatával.
Mi történik, ha a destruktor nem virtuális?
Virtuális destruktor nélküli osztály törlése csak a törlendő mutató típusának destruktorát hívja meg . Ez hibát okozhat, ha a mutató típusa alaptípus, míg az objektumpéldány származtatott típusú.