Вы должны delete
каждый указатель, который вы выделяете с помощью new
.Это так просто и так сложно;вы не должны терять любой указатель, выделенный new
, пока не получите delete
d.
Кроме того, вам необходимо убедиться, что если вы используете new[]
для выделения указателя, вы вызываете delete[]
чтобы освободить его.
Дело не в том, какие указатели у вас есть в экземпляре класса.Вам необходимо знать, кому принадлежит (владелец является ответственным за их удаление).Если вашему объекту принадлежат эти указатели, он должен их удалить.Если он не владеет ими, то не должен.
Именно поэтому опытные программисты на C ++ избегают использования голых указателей, где это возможно.Умные указатели позволяют вам семантически выражать виды собственности на языке.Таким образом, вам не нужно отслеживать, кому что принадлежит;Вы знаете, кому он принадлежит, по типу используемого интеллектуального указателя.