Tương tự như tính hợp pháp của delete this
, vị trí mới this
cũng được cho phép theo như tôi biết. Ngoài ra, liên quan đến việc this
, hoặc các con trỏ / tham chiếu có sẵn khác có thể được sử dụng sau đó, có một vài hạn chế:
[cơ bản. cuộc sống]
Nếu, sau khi thời gian tồn tại của một đối tượng kết thúc và trước khi lưu trữ mà đối tượng bị chiếm dụng được tái sử dụng hoặc giải phóng, một đối tượng mới được tạo tại vị trí lưu trữ mà đối tượng ban đầu chiếm giữ, một con trỏ trỏ đến đối tượng ban đầu, một tham chiếu được tham chiếu đến đối tượng ban đầu, hoặc tên của đối tượng ban đầu sẽ tự động đề cập đến đối tượng mới và, khi vòng đời của đối tượng mới bắt đầu, có thể được sử dụng để thao tác với đối tượng mới, nếu:
- bộ lưu trữ cho đối tượng mới phủ chính xác vị trí lưu trữ mà đối tượng ban đầu chiếm giữ và
- đối tượng mới cùng loại với đối tượng ban đầu (bỏ qua các vòng loại cv cấp cao nhất) và
- loại của đối tượng ban đầu không đủ điều kiện const và, nếu một loại lớp, không chứa bất kỳ thành viên dữ liệu không tĩnh nào có loại đủ điều kiện const hoặc loại tham chiếu và
- không phải đối tượng ban đầu cũng như đối tượng mới không phải là một tiểu dự án có khả năng chồng chéo ([intro.object]).
Hai cái đầu được thỏa mãn trong ví dụ này, nhưng hai cái cuối sẽ cần được xem xét.
Về điểm thứ ba, do hàm này không đủ điều kiện, nên khá an toàn khi cho rằng đối tượng ban đầu là không const. Lỗi nằm ở phía người gọi nếu chòm sao đã bị bỏ đi. Về const / thành viên tham chiếu, tôi nghĩ rằng có thể được kiểm tra bằng cách khẳng định rằng điều này có thể gán được:
static_assert(std::is_trivial_v<A> && std::is_copy_assignable_v<A>);
Tất nhiên, vì khả năng chuyển nhượng là một yêu cầu, thay vào đó bạn chỉ có thể sử dụng *this = {};
cái mà tôi mong đợi để sản xuất cùng một chương trình. Một trường hợp sử dụng thú vị hơn có thể là sử dụng lại bộ nhớ *this
cho một đối tượng thuộc loại khác (điều này sẽ không đáp ứng các yêu cầu sử dụng this
, ít nhất là không diễn giải lại + giặt giũ).
Tương tự như delete this
, vị trí mới this
khó có thể được mô tả là "an toàn".