2010-10-08 35 views

Trả lời

10

Nó có thể hoạt động. Nó phụ thuộc vào cách thực hiện Tile& operator = (const Tile&);. Tuy nhiên, không có gì sai về bản chất với việc gán *this cho một giá trị mới.

0

Nó phụ thuộc vào việc triển khai. Ví dụ, nếu toán tử gán dựa trên biến thành viên của lớp Tile đang được khởi tạo (và điều đó là khá bình thường) và biến đó không được khởi tạo bởi hàm tạo Tile trước khi bạn gọi nhiệm vụ *this = mà bạn có thể chạy vào hành vi không xác định.

+1

Điều này dành riêng cho câu hỏi như thế nào? Nếu một hàm tạo không khởi tạo đúng thành viên, hãy thực hiện _anything_ với đối tượng có thể gọi hành vi không xác định. – sbi

+0

@sbi: Không phải bất cứ điều gì. Bạn có thể có một biến thành viên con trỏ chưa được sử dụng. Trong trường hợp này bạn có thể an toàn khởi tạo và phá hủy đối tượng. Quan điểm của tôi là * nó phụ thuộc *. – sharptooth

+0

Xin lỗi, nhưng điều đó không bay. Một con thú như vậy cũng có thể được phân công đến và đi. – sbi

-1

An toàn nếu bản sao của bạn consturctor không làm bất cứ điều gì khó chịu.

+1

hàm tạo bản sao không được gọi trong mã đã cho. – YeenFei

1

Mã là OK và Herb Sutter even recommends gọi toán tử gán trên this, ngay cả trong một hàm tạo. Tôi nghĩ đó là một giải pháp cực kỳ sạch sẽ, thanh lịch. Ngay cả khi nó không hoạt động lúc đầu, việc thay đổi mã của bạn để làm cho nó hoạt động có lẽ sẽ là vấn đề dọn dẹp.

+0

Sau đó, đó là một điều mà tôi không đồng ý với Herb. Xây dựng, thậm chí xây dựng bản sao và phân công là hai hoạt động khác nhau vì một lý do. Nếu bất cứ điều gì, toán tử gán phải sử dụng [thành ngữ sao chép và hoán đổi] (http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom), đó là: nó _does_ sử dụng các nhà xây dựng bản sao, mặc dù trong một cách tốt hơn so với một bài viết của Herb bắt đầu với. – sbi

Các vấn đề liên quan