[问题]学习unique_ptr遇到的compile error

楼主: shaopin (Brian)   2016-02-19 11:24:10
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++ -std=c++11
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
N/A
问题(Question):
因为新学c++11, 我根本连compile error 要怎么fix 都不知道
请各位大神指点看看
huffman.cc:22:23: error: object of type 'std::__1::unique_ptr<huffman_node, std::__1::default_delete<huffman_node> >' cannot be assigned because its copy
assignment operator is implicitly deleted
left_ = std::move(other.left_);
^
程式码(Code):(请善用置底文网页, 记得排版)
http://codepad.org/KP4m4CRE
感恩
作者: Caesar08 (Caesar)   2016-02-19 11:43:00
http://ideone.com/j6dPld对一个const object做move,会return const T &&一般来说,copy的parameter用const T &,move的则是T &&当你return const T &&,他会被传给copy而不是move因此你就会看到cannot be assigned because its copyassignment operator is implicitly deleted但你却觉得奇怪,明明你已经move了,怎么还会用copy呢不过17行那边应该使用move constructor,我只是示范给你看
楼主: shaopin (Brian)   2016-02-19 13:40:00
感恩, 那这一行std::unique_ptr<huffman_node> p = std::move(nodes[i])compile 也出现问题, 请问也是要用move ctor吗
作者: Caesar08 (Caesar)   2016-02-19 14:17:00
print_node有很大的问题,只是印出来,为什么要move?
作者: BlazarArc (Midnight Sun)   2016-02-19 15:30:00
http://ideone.com/RLfbKX 这样就好 print为何要move?
作者: firose (guest也是也是也是也是也)   2016-02-19 16:02:00
copy应该指向新物件吧? 像raw ptr那样, 不是在里面move否则好像应该用 shared_ptr

Links booklink

Contact Us: admin [ a t ] ucptt.com