C++ 从取消引用的指针返回原始指针 auto&element=*std::make_unique(); auto n=sfElements.size(); 元素集索引(n); 元素。设置曲线(曲线); sfElements.push_back(std::move(*element));/>这不管用

C++ 从取消引用的指针返回原始指针 auto&element=*std::make_unique(); auto n=sfElements.size(); 元素集索引(n); 元素。设置曲线(曲线); sfElements.push_back(std::move(*element));/>这不管用,c++,c++11,pointers,C++,C++11,Pointers,我尝试了auto-element=std::make_unique()而不是*element和element.此代码段中的所有位置即可。否则,您将得到未定义的行为,正如上面提到的@someprogrammerdude。并从第一个代码段行中删除&和*。Share//I正在尝试获取从此行创建的指针“auto&element=*std::make_unique();”auto&element=*std::make_unique()表示“给我一个无效的引用”。对不起,我听不懂其余的。我有点困惑。您是否正

我尝试了
auto-element=std::make_unique()sfElements.push_-back(std::move(element))工作正常

取消传递唯一指针将导致获取源元素类。然后进入元素值。 但我想知道是否有任何方法可以得到原始指针,它是唯一的指针 取消引用的指针(它是源元素类)就像我在上面写的代码一样

不,没有办法

对于C++中的任何对象,指向指针的指针可能是任意数目的(包括由智能指针所包裹的指针),但对象本身并不自动知道指针。指针是单向的

也就是说,如果您取消引用一个
std::unique_ptr
来获取底层
T
,那么
T
本身将不知道它来自何处



您的代码还包含一些错误,最明显的是
auto&element=*std::make_unique()没有意义,因为您尝试创建对临时对象的引用。

不,没有办法

对于C++中的任何对象,指向指针的指针可能是任意数目的(包括由智能指针所包裹的指针),但对象本身并不自动知道指针。指针是单向的

也就是说,如果您取消引用一个
std::unique_ptr
来获取底层
T
,那么
T
本身将不知道它来自何处



您的代码还包含一些错误,最明显的是
auto&element=*std::make_unique()没有意义,因为您尝试创建对临时对象的引用。

auto&element=*std::make_unique()表示“给我一个无效的引用”。对不起,我听不懂其余的。我有点困惑。您是否正在尝试获取底层原始指针?您所拥有的在多个方面都不好。首先,无法从对包装对象的引用中获取
std::unique_ptr
对象。更糟糕的是,通过使用
*std::make_unique()
您正在创建一个临时
std::unique_ptr
对象,分配结束后,该元素将被销毁,留下对已销毁对象的引用和未定义的行为。只需使用
element
element->
而不是
*element
element.
此代码段中的所有位置即可。否则,您将得到未定义的行为,正如上面提到的@someprogrammerdude。并从第一个代码段行中删除
&
*
。Share//I正在尝试获取从此行创建的指针“auto&element=*std::make_unique();”
auto&element=*std::make_unique()表示“给我一个无效的引用”。对不起,我听不懂其余的。我有点困惑。您是否正在尝试获取底层原始指针?您所拥有的在多个方面都不好。首先,无法从对包装对象的引用中获取
std::unique_ptr
对象。更糟糕的是,通过使用
*std::make_unique()
您正在创建一个临时
std::unique_ptr
对象,分配结束后,该元素将被销毁,留下对已销毁对象的引用和未定义的行为。只需使用
element
element->
而不是
*element
element.
此代码段中的所有位置即可。否则,您将得到未定义的行为,正如上面提到的@someprogrammerdude。并从第一个代码段行中删除
&
*
。Share//I正在尝试获取从此行创建的指针“auto&element=*std::make_unique();”
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