Tôi có một lớp không thể kiểm tra. Sao chép này sẽ là vấn đề. Tôi muốn đảm bảo rằng nó sẽ không được bao giờ sao chép, vì vậy tôi làm bản sao của nó constructor deleted
:Làm thế nào để thực thi sao chép elision, tại sao nó sẽ không làm việc với các nhà xây dựng bản sao đã xóa?
class A {
public:
A();
A(const A&) = delete;
};
A fun() {
return A();
};
int main() {
A a = fun();
};
Thật không may, g ++ sẽ không biên dịch này vào lý do:
t.cc: In function ‘A fun()’:
t.cc:8:12: error: use of deleted function ‘A::A(const A&)’
return A();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
t.cc: In function ‘int main()’:
t.cc:12:13: error: use of deleted function ‘A::A(const A&)’
A a = fun();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
Nhưng đây là một tình huống rất rõ ràng khi sử dụng sao chép bản sao, do đó, các nhà xây dựng sao chép không nên được gọi. Tại sao nó như vậy?
Đợi đến khi C++ 17, có thể nó sẽ được đảm bảo –
Rất tiếc. Đã chuyển để trả lời. –
Jesper không lặp lại câu trả lời của bạn, bạn không đề cập đến những thay đổi sắp tới cho đến khi nhận xét của chúng tôi –