Если я правильно понимаю, вы пишете что-то похожее на std::unique_ptr
.
Так что, что касается std::unique_ptr
, operator=()
должен работать с семантикой перемещения, поэтому получение ссылки на r-vale, Auto_ptr &&
, а не ссылка на l-значение
Auto_ptr2& operator=(Auto_ptr2 && a)
{
std::cout<<"\nAuto_ptr2 operator = called";
if (&a == this)
return *this;
delete m_ptr;
m_ptr = a.m_ptr;
a.m_ptr = nullptr;
return *this;
}
И использование должно проходить через std::move()
res2=fun(std::move(res2));
Та же проблема с конструкторами: избегайте копирования конструктора (возможно, удалите его)) и написать конструктор перемещения.
Auto_ptr2 (Auto_ptr2 const &) = delete;
Auto_ptr2 (Auto_ptr2 && a)
{
std::cout<<"\nAuto_PTR2 move constructor called";
m_ptr = a.m_ptr;
a.m_ptr = nullptr;
}