Tôi có một lớp đại diện cho một bối cảnh thời gian chạy và xây dựng một cây, gốc cây được giữ trong một unique_ptr
. Khi xây dựng cây được thực hiện, tôi muốn giải nén cây. Đây là cách có vẻ (không Runnable, đây không phải là một câu hỏi gỡ lỗi):std :: unique_ptr :: release() vs std :: move()
class Context {
private:
std::unique_ptr<Node> root{new Node{}};
public:
// imagine a constructor, attributes and methods to build a tree
std::unique_ptr<Node> extractTree() {
return std::move(this->root);
}
};
Vì vậy, tôi sử dụng std::move()
để trích xuất các nút gốc từ Context
dụ.
Tuy nhiên có một giải pháp thay thế cho việc sử dụng std::move()
ví dụ .:
std::unique_ptr<Node> extractTree() {
// This seems less intuitive to me
return std::unique_ptr<Node>{this->root.release()};
}
là std::move()
lựa chọn tốt nhất?
Bạn cần gọi 'đặt lại' từ 'this-> root' sau khi di chuyển. Bạn nên đọc câu trả lời này tốt hơn http://stackoverflow.com/a/20850223/555515 – neuront
@neuront: Không, bạn không biết. –
sau khi di chuyển src chứa nullptr, reset là vô nghĩa! – paulm