【发布时间】:2020-05-02 20:30:31
【问题描述】:
问题
你好。我有一个有点奇怪的问题。假设您有一个不可复制的堆栈对象,它是从外部库中获得的。如何在不实际实例化类的情况下将内容移动到由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 将新创建的对象的内容从指定的对象中移出?
【问题讨论】:
标签: c++ scope shared-ptr