auto &element = *std::make_unique<Source_Element>();
auto n = sfElements.size();
element.setIndex(n);
element.setCurve(curve);
sfElements.push_back(std::move(*element)); // -> this doesn't work
我尝试auto element = std::make_unique<Source_Element>();
然后,sfElements.push_back(std::move(element));
它运作得很好
在获取Source_Element类时取消引用唯一指针。然后它进入元素价值。 但我想知道无论如何都要获得原始指针,它是唯一的指针 解除引用的指针(它是Source_Element类)就像我在顶部写的代码
答案 0 :(得分:2)
不,没有办法。
对于C ++中的任何对象,可能会有指向它的任意数量的指针(包括那些由智能指针包装的指针),但对象本身并不会自动了解它们。指针是单向的。
也就是说,如果您取消引用std::unique_ptr<T>
以获取基础T
,那么T
本身就不知道它来自哪里。
您的代码也包含一些错误,最值得注意的是auto &element = *std::make_unique<Source_Element>();
没有意义,因为您尝试创建对临时对象的引用。