Ваш код страдает от множества проблем и в конечном итоге не имеет смысла.Тем не менее, давайте пройдемся по нему.
1) Вы можете привязать временный объект только к ссылке const , увеличивая таким образом его время жизни:
const TestClass & c = TestClass();
2)нельзя использовать dump
, потому что вы не объявили его const
:
void Dump() const
3) Сказать c = TestClass()
- это задание.Однако c
теперь является ссылкой на const, которой нельзя присваивать, поскольку присваивание не является постоянным (по очевидным причинам).Давайте разберемся с этим:
const_cast<TestClass&>(c) = TestClass(10);
Теперь мы присвоили новое значение временно-расширенному объекту c
, и все так, как и должно быть:
main started
data = 0 ptr = 0x0xbfa8219c
destructor
data = 10 ptr = 0x0xbfa8219c
main ended
destructor
Указатели одинаковы, потому что есть только один объект, а именно (временный) объект, на который ссылается c
.Присвоение ему является хаком, который в целом не определил поведение, но для целей этой демонстрации нам это сойдет с рук.
Промежуточный деструктор - это второй временный TestClass(10)
.