Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
立即取消引用唯一\u ptr 我不太熟悉现代C++,希望能更好地理解下面的片段: State & m_rootstate; //... auto currstate = std::make_unique<State> (m_rootstate); do_something (*currstate); // currstate is not used anywhere else State&m_rootstate; //... auto currstate=std::make_unique(m_rootstate); 做某事(*当前状态); //currstate不在其他任何地方使用_C++_Unique Ptr - Fatal编程技术网

立即取消引用唯一\u ptr 我不太熟悉现代C++,希望能更好地理解下面的片段: State & m_rootstate; //... auto currstate = std::make_unique<State> (m_rootstate); do_something (*currstate); // currstate is not used anywhere else State&m_rootstate; //... auto currstate=std::make_unique(m_rootstate); 做某事(*当前状态); //currstate不在其他任何地方使用

立即取消引用唯一\u ptr 我不太熟悉现代C++,希望能更好地理解下面的片段: State & m_rootstate; //... auto currstate = std::make_unique<State> (m_rootstate); do_something (*currstate); // currstate is not used anywhere else State&m_rootstate; //... auto currstate=std::make_unique(m_rootstate); 做某事(*当前状态); //currstate不在其他任何地方使用,c++,unique-ptr,C++,Unique Ptr,我看到一个唯一的\u ptr是从对状态的引用创建的。这应该使用State的copy-ctor来创建State的新实例,并且指向该新实例的指针被包装在currstate中 然后,currstate立即作为函数的参数取消引用当前状态在此之后不使用,但在调用完成之前,它不会超出范围,因此它及其链接的状态不会过早被破坏 对于调用,使用unique_ptr中的值。根据dou\u something是采用状态还是状态&,将再次复制或不复制 是这样吗?如果是这样的话,unique\u ptr的目的仅仅是创建m

我看到一个
唯一的\u ptr
是从对
状态的引用创建的。这应该使用
State
的copy-ctor来创建
State
的新实例,并且指向该新实例的指针被包装在
currstate

然后,
currstate
立即作为函数的参数取消引用<代码>当前状态
在此之后不使用,但在调用完成之前,它不会超出范围,因此它及其链接的
状态
不会过早被破坏

对于调用,使用
unique_ptr
中的值。根据
dou\u something
是采用
状态
还是
状态&
,将再次复制或不复制

是这样吗?如果是这样的话,
unique\u ptr
的目的仅仅是创建
m\u rootstate
的副本,而不必担心内存管理,这是否正确

State & m_rootstate; 
这本身毫无意义——我猜你遗漏了重要的东西。必须初始化引用

//...
auto currstate = std::make_unique<State> (m_rootstate);
根据do_something是采用状态还是状态&,将再次复制或不复制它。对

如果是,那么unique\u ptr的目的仅仅是创建m\u rootstate的副本,而不必担心内存管理,这是否正确?

在这种情况下,似乎没有必要首先创建
唯一的\u ptr
。 您也可以创建一个直接堆栈副本,如下所示:

State currstate(m_rootstate);
是这样吗

你的描述是准确的,是的

如果您想询问程序是否定义良好:在开始时忽略未初始化的引用,则没有显示格式错误或行为未定义的代码。也就是说,您没有显示完整的程序,因此我们无法知道完整的程序是否正确


如果是这样的话,
unique\u ptr
的目的仅仅是创建
m\u rootstate
的副本,而不必担心内存管理,这是否正确

State & m_rootstate; 
对。处理动态分配的内存管理确实是唯一指针类的目的。(或者更一般地说,注意释放资源)


请注意,所示摘录并未揭示为什么需要动态分配或是否需要动态分配。它也没有透露为什么或者是否需要一份拷贝。也许这些东西是需要的。然而,在不需要的时候应该避免这些事情。

从发布的代码来看,根本不清楚是否需要一个
唯一的\u ptr
。这个片段是完全没有意义和错误的。除此之外没有什么需要理解的。代码是从哪里来的?你试过问它的作者吗?@n.m怎么会这样?在某些情况下,这可能是正确的做法。例如,如果do_某物改变了其参数,但您出于任何原因不想保留更改,因此您传递了一份副本。如果State对象对于堆栈来说太大,则需要动态分配它。在这种情况下,编写的代码似乎很好。@George什么?那与我的观点无关。如果对象无法放入堆栈,则必须使用堆,无论堆是否较慢。n、 m说这是完全错误的。我只是给出一个(诚然是人为的)可能正确的例子。