Создает ли утечка памяти?
Потенциально, да.Если вы присваиваете экземпляру Foo
, память, принадлежащая предыдущему значению указателя, просачивается.
Разве это не выполнялось раньше?Может быть, даже когда заголовок анализируется?
Нет.Члены инициализируются конструктором.Инициализатор члена по умолчанию в объявлении члена используется, если конструктор не указывает явно инициализатор члена (например, в случае с объявленным вами конструктором).
Это использование нормально?Это гарантированно для меня совпадает с удалением в деструкторе?
Нет.Помимо утечки, если вы сделаете копию объекта, будет два удаления, соответствующих только одному новому.Программа будет иметь неопределенное поведение.
Самое простое решение как для утечки, так и для UB - использовать std::unique_ptr
вместо простого указателя.(Или, возможно, std::shared_ptr
в случае, если вы хотите, чтобы класс был копируемым, и хотите, чтобы копии разделяли владение одним и тем же Baz
объектом).
Хотя с инициализатором члена по умолчанию проблем нет.Упомянутые выше проблемы связаны с отсутствием инвариантов классов, которые необходимы при работе с ресурсами.