Ссылки и (необработанные) указатели на объект не управляют его временем жизни.Поэтому, когда любой из них выйдет за рамки видимости, реальный объект не будет уничтожен.В противном случае вы не могли бы создавать ссылки или указатели на объекты, расположенные в стеке, поскольку они затем будут уничтожены несколько раз (когда ссылка / указатель выходит из области видимости и когда сам объект выходит из области видимости).По моему мнению, самый простой способ понять ссылки на c ++ - это думать о них как о указателях, которые не могут быть переназначены и автоматически разыменовываются при каждом доступе (в основном это синтаксический сахар, скрывающий указатель от программиста).
Assidenote, ваш код не является правильным C ++.MyCLass foo = new MyClass()
объявляет (размещенный в стеке) объект типа MyClass
, но пытается присвоить ему результат new MyClass()
, который является указателем на выделенный объект кучи типа MyClass
.Правильный способ инициализации foo
будет MyClass foo;