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