Mã có đúng không?Một unique_ptr có giá trị nullptr không?
unique_ptr<A> p(new A());
p = nullptr;
Tôi có nên sử dụng nullptr với một * unique_ptr *? hoặc nó sẽ thất bại?
Tôi thử trên g ++, nhưng, Còn về trình biên dịch khác thì sao?
Mã có đúng không?Một unique_ptr có giá trị nullptr không?
unique_ptr<A> p(new A());
p = nullptr;
Tôi có nên sử dụng nullptr với một * unique_ptr *? hoặc nó sẽ thất bại?
Tôi thử trên g ++, nhưng, Còn về trình biên dịch khác thì sao?
Nó sẽ hoạt động.
Từ Đoạn 20.7.1.2.3/8-9 của C++ 11 tiêu chuẩn về unique_ptr<>
lớp mẫu:
unique_ptr& operator=(nullptr_t) noexcept
;Hiệu ứng:
reset()
.hậu:
get() == nullptr
Điều này có nghĩa rằng định nghĩa của lớp mẫu unique_ptr<>
bao gồm một quá tải của operator =
chấp nhận một giá trị kiểu nullptr_t
(như nullptr
) như phía bên tay phải của nó; đoạn này cũng quy định rằng việc gán nullptr
cho một unique_ptr
tương đương với việc đặt lại unique_ptr
.
Do đó, sau bài tập này, đối tượng A
của bạn sẽ bị hủy.
Tôi hiểu. BTW, chỉ nullptr có nullptr_t, đó là cách nó được thực hiện, phải không? – Zhen
@Zhen: Tiêu chuẩn không quy định điều này. Bạn có thể tạo một biến kiểu 'nullptr_t', nhưng tôi nghi ngờ bạn sẽ cần phải làm điều đó. –