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ú.

Virtuális destruktor C++ nyelven

41 kapcsolódó kérdés található