obj1
- это объект типа cl1
с длительностью автоматического хранения (он размещается в стеке, а его время жизни определяется областью, в которой он находится)
obj1
- это объект типа cl1*
. То есть это указатель . Указатель также имеет автоматическую продолжительность хранения, но объект, на который он указывает, не имеет. Он указывает на динамически размещаемый объект в бесплатном хранилище.
При выходе из области действия объекты с автоматическим хранением уничтожаются. obj1
уничтожается, вызывая вашего деструктора. И obj2
также уничтожается, но obj2
не относится к типу cl1
, поэтому он не вызывает деструктор cl1
. Это указатель, и он не делает ничего особенного, когда уничтожается.
Указатели не владеют объектами, на которые они указывают, и поэтому они ничего не делают, чтобы гарантировать, что указанный объект будет уничтожен или очищен. (Если вам нужен «владеющий» указатель, для этого нужны классы умных указателей)
Учтите, что вы можете легко иметь несколько указателей, указывающих на один и тот же объект.
Если указатель автоматически удалит объект, на который он указывает, это приведет к ошибкам. Объект, на который указывают два разных указателя, будет удален дважды.