C++ презаписване на деструктори - продължава ли да зачиства паметта?
Здравейте,
Опитвам се да разбера как работят деструкторите и какво се случва, когато ги презапишем. Разсъждавам по аналогия с Java и C#.
Доколкото разбирам има дефолтен деструктор. Най-вероятно долу изглежда нещо от рода на:
~MyClass()
{
deleteFromMemory();
}
Ако обаче ние имплементираме деструктор, фактически овърлоудваме дефолтния. Примерно правим
~MyClass()
{
cout << "MyClass has been destroyed";
}
Обаче никъде в нашия деструктор ние не му казваме да си зачисти паметта. Не трябва ли вътре в него да извикаме деструктора на базовия метод или нещо такова?
Благодаря за отговора. Съвсем начинаещ съм в С++ и през ума ми не беше минал този начин за тестване. Малко ми е странно, че пак ще се изтрие в паметта, понеже разсъждавам с концепциите от C#. Как се случва това, при положение, че изцяло променяме имплементацията на метода?
Предполагам, че извикването на деструктор метода е в допълнение към това, че се изтрива обекта, а не вместо това. Та вероятно потокът е: "Освободи паметта и извикай, ако има написани деструктори".
Мисля че освобождаването на памет не означава че данните в паметта непременно трябва да се заменят с произволни. Просто паметта става свободна за ползване. Може пак да ти покаже "pesho", но паметта да е освоободена. Това ако правилно съм разбрал случая.
Иначе като пренаписваш деструктори мисля че трябва да се грижиш да разрушаваш обекти които си заделил в heap-a. Също да затваряш потоци към файлове или да затваряш мрежови потоци. Ако например си си направил някакъв обект в конструктора без да ползваш new не би трябвало да го мислиш.