Я думаю, что понимаю большинство вещей rvalue, но когда я попытался реализовать следующий код, я получил ошибку сегментации (ядро сброшено) :( возможно, мне все еще не хватает некоторых деталей, и я был бы признателен за любую помощь!
У меня есть struct Mode
в заголовке:
#include <memory>
#include <iostream>
struct Mode
{
explicit Mode(const int id_in, const int p_val=1) : id{id_in}, p{new int{p_val}} {
std::cout << "explicit param default ctr called..." << std::endl;
}
Mode() : id{42}, p{nullptr}{
std::cout << "default ctr called..." << std::endl;
}
Mode&& clone() {
Mode m(*this);
m.p.reset(new int{*m.p});
return std::move(m);
}
int id;
std::shared_ptr<int> p;
};
и в основном. cpp Я делаю это:
int main()
{
Mode m{42, 43};
Mode m2;
m2 = m.clone();
cout << m.p << endl;
cout << m2.p;
}
что происходит подробно в строке m2 = m.clone()
? Что я понимаю до сих пор: в clone()
он создает временную копию m
, используя конструктор копирования Mode m(*this)
, и std :: перемещает содержимое этого временного объекта и, наконец, возвращает его вызывающей стороне m2
. И в основном. cpp Я присваиваю rvalue для m2
, используя назначение перемещения? Я не уверен до этого шага ...