Денис Ахунов, есть простое решение.
Подними руку и скажи: "Свободная касса!". Получилось? Тогда можешь не заморачиваться, у тебя уже все хорошо.
А если все-таки хочешь программировать - учись сформулировать задачу так, чтобы ее понял не только твой воображаемый друг.
Владимир Коротенко, исключение. В конструкторе класса-наследника. В С++.
Деструктор класса при исключении не будет вызван. Соответственно, не будет вызван и деструктор предка.
Реализация строки, например, от которой вы предлагаете наследоваться, может выделить буфер в памяти под данные.
Удалить его после броска исключения - некому, никаких сборщиков мусора нет.
Утечка памяти на ровном месте.
"Моя проблема", видимо, в том, что я пишу на Крестах, а не на Шарпе.
Деструктор класса при исключении не будет вызван. Соответственно, не будет вызван и деструктор предка.
Это не соответствует действительности. Давай почитаем, что говорит об этом автор языка.
На деле, при обрыве цепочки инициализации объекта, деструкторы будут вызваны только для тех родительских типов, для которых отработали конструкторы. И независимо от набора вызванных деструкторов, т.к. поля конструируются до вызова конструктора, сконструированные поля сбойного типа будут правильно уничтожены.
Все это верно и для случая, когда исключение бросает само поле из своего конструктора.
С сырыми указателями нужно быть аккуратнее в таких случаях. Но это уже проблема автора типа, который может бросить исключение из конструктора. Пусть не ранит голые указатели в своем хрупком типе.
Евгений Шатунов, да, действительно, родительский класс подчищается при исключении в конструкторе наследника. Проблемы могут быть только с данными самого наследника или у класса, у которого такой наследник будет членом.
Пардон, соврамши.