Столкнулся с интересной ситуацией при конструировании одноименных объектов класса без определенного оператора присваивания и явного конструктора с одним аргументом:
#include <iostream>
class A
{
public:
A(int data)
{
std::cout << "A(int)" << " " << this << std::endl;
}
~A()
{
std::cout << "~A()" << " " << this << std::endl;
}
};
int main(int argc, char **argv)
{
A a(1);
a = 2;
std::cout << "Breakpoint" << std::endl;
return 0;
}
Вывод:
A(int) 0x7ffd1f2460a6
A(int) 0x7ffd1f2460a7
~A() 0x7ffd1f2460a7
Breakpoint
~A() 0x7ffd1f2460a6
Кто-нибудь знает почему происходит удаление второго одноименного объекта сразу же после его конструирования, а не первого объекта (ранее созданного) до конструирования второго? Что по этому поводу говорит стандарт?
Понятно, что в приведенном коде нет особого практического смысла, но все же интересно, почему именно так.