[問題]學習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