Является ли это правильным способом освобождения памяти
Деструктор в порядке, предполагая, что все сохраненные указатели были выделены с использованием выражения new, и предполагая, что все онивсе еще действительны, то есть не висят.
Очистка векторов, тем не менее, избыточна.Векторы практически уничтожены, поэтому их элементы все равно будут очищены.
Однако ваш класс, скорее всего, сломан.Он копируемый, и если вы делаете копию и не удаляете указатели из одной из копий, то деструкторы этих объектов будут удалять те же указатели, что приведет к неопределенному поведению.
Вы можетеисправить эту проблему, а также упростить деструктор (вы можете просто использовать неявный деструктор) с помощью интеллектуальных указателей.
если я буду использовать уникальный или общий указатель
Да, вам следует.
Ваш код демонстрирует уникальное право собственности - Company
уникально владеет Employee
s и Team
s, поэтому самое простое изменение - использование уникальных указателей.
У меня есть красные умные указатели и они удаляют выделенную память, когда заканчивается область, но я действительно запутался, когда закончится.Это произойдет, когда вызывается деструктор компании?
Это деструктор умного указателя, который удаляет указатель.
Когда умный указатель является локальной переменной,это уничтожено в конце области.Так же, как если Company
является локальной переменной, она уничтожается в конце области видимости, и ее деструктор запускается.
Когда умный указатель является членом, он уничтожается, когда суперобъектуничтожены.В вашем случае у вас был бы вектор умных указателей, и в этом случае умный указатель уничтожается, когда вектор уничтожается, или умный указатель стирается из вектора.