Đây có phải là cách hợp lệ để tạo toán tử gán với các thành viên tham chiếu không?Nhà điều hành chuyển nhượng với thành viên tham chiếu
#include <new>
struct A
{
int &ref;
A(int &Ref) : ref(Ref) { }
A(const A &second) : ref(second.ref) { }
A &operator =(const A &second)
{
if(this == &second)
return *this;
this->~A();
new(this) A(second);
return *this;
}
}
Dường như với biên dịch và chạy tốt, nhưng với C++ xu hướng bề mặt hành vi undefined khi ít mong đợi nhất, và tất cả những người mà nói không thể của mình, tôi nghĩ rằng có một số Gotcha tôi bỏ qua. Tôi đã bỏ lỡ bất cứ điều gì?
Bằng cách này, các đối số cho 'operator =' và các nhà xây dựng bản sao nên tham khảo const. –
Sự chính xác có thể bị hạn chế đối với các kiểu bố trí chuẩn, vì với các virtual 'this' không cần phải là con trỏ tới phần đầu của khối bộ nhớ. –
Nếu bạn cần làm điều này, tôi khuyên bạn nên xem xét lại bằng cách sử dụng tài liệu tham khảo. – bames53