Tôi đang cố gắng trả lại thành viên std::unique_ptr class
(cố gắng chuyển quyền sở hữu) cho người gọi. Sau đây là một đoạn mã mẫu:Trả lại thành viên unique_ptr từ phương thức lớp học
class A {
public:
A() : p {new int{10}} {}
static std::unique_ptr<int> Foo(A &a) {
return a.p; // ERROR: Copy constructor getting invoked
// return std::move(a.p); WORKS FINE
}
std::unique_ptr<int> p;
};
Tôi nghĩ trình biên dịch (gcc-5.2.1) sẽ có thể làm tối ưu hóa giá trị trả về (bản sao sự bỏ bớt) trong trường hợp này mà không đòi hỏi mục đích rõ ràng qua std::move()
. Nhưng đó không phải là trường hợp. Tại sao không?
Các mã sau đây dường như được làm việc tốt, mà dường như tương đương:
std::unique_ptr<int> foo() {
std::unique_ptr<int> p {new int{10}};
return p;
}
Đây là câu hỏi đầu tiên tuyệt vời. Chào mừng bạn đến với StackOverflow! – Barry