Tại sao C++ auto_ptr có hai trình tạo bản sao và hai toán tử gán nhưng một hàm tạo mặc định?
Nó không có.
Nó có 1 constructor mặc định (một constructor mà mất 0 đối số)
explicit auto_ptr (T* ptr = 0) throw()
Nó có 1 bản constructor (một constructor mà làm cho một bản sao từ một đối tượng cùng loại)
auto_ptr (auto_ptr& rhs) throw()
Nó có 1 toán tử gán được sử dụng để gán các đối tượng cùng loại.
auto_ptr& operator= (auto_ptr& rhs) throw()
Nó có hàm tạo khuôn mẫu ưa thích lấy auto_ptr các loại khác (đây không phải là hàm tạo bản sao nó chỉ là một hàm tạo bình thường (mặc dù nó được tạo khuôn mẫu)).
template<class Y>
auto_ptr (auto_ptr<Y>& rhs) throw()
Nó có một toán tử gán mà có các loại khác nhau của con trỏ tự động (Vì vậy, có đây là một toán tử gán nhưng nó không phải là một toán tử gán bản sao (nhưng một toán tử gán chuyển đổi) là RHS có một kiểu khác nhau) .
template<class Y>
auto_ptr& operator= (auto_ptr<Y>& rhs) throw()
Nguồn
2010-11-29 20:13:59
Thừa kế tạo ví dụ tốt hơn về cách sử dụng mẫu, nhưng cũng áp dụng cho sự khác biệt cv. –
@Fred, vâng, kế thừa là trường hợp phổ biến hơn, nhưng làm cho một ví dụ ngắn gọn hơn. – Eclipse
Có vẻ như hai thứ đã bị mất trong dòng khai báo f4, ý của bạn là auto_ptr f4 = new Foo()? –