Вопрос
Привет. У меня немного странный вопрос. Предположим, у вас есть не копируемый объект стека, который вы получили из внешней библиотеки. Как можно переместить содержимое в объект кучи, выделенный std::make_shared
, без фактического создания экземпляра класса?
class my_class {
private:
my_class(my_class const&) = delete;
public:
my_class(some_arg_t some_args);
my_class(my_class&& move);
}
// later on
std::unordered_set<std::shared_ptr<my_class>> shared_pointers_container;
int foo() {
my_class obj = getMyClassObject();
shared_pointers_container.insert(// moving obj into heap memory and get the shared pointer to it)
}
Одним из "решений" может быть создание экземпляра объекта и его замена, как показано ниже
std::shared_ptr<my_class> ptr = std::make_shared<my_class>(arguments_needed);
*ptr.get() = std::move(obj);
shared_pointers_container.insert(ptr);
, но это не очень хорошее решение (в случае, если конструктор делает некоторые изменения).
Возможно, способ std::make_shared
переместить содержимое вновь созданного объекта от указанного объекта?