为什么 unique_ptr operator* 不是 noexcept?
Why is unique_ptr operator* not noexcept?
在为我的爱好实现一个基本的 std 库时 OS 我遇到了这个并想知道为什么:
operator->()
和 T* get()
都标记为 noexcept,但 operator*()
不是。根据参考,它应该等同于 *get()
,这将允许它成为 noexcept
并且查看一些实现我看不出为什么它不是。
为什么 unique_ptr
的取消引用运算符未标记为 noexcept
?
因为 operator*
对于 pointer
类型的 std::unique_ptr
可能会抛出。 pointer
类型别名是 defined as:
std::remove_reference<Deleter>::type::pointer
if that type exists,
otherwise T
*. Must satisfy NullablePointer
这可能是 T*
以外的东西,它可能是重载 operator*
的 class 类型。
typename std::add_lvalue_reference<T>::type operator*() const;
(1) (since C++11)
pointer operator->() const noexcept;
(2) (since C++11)
然后:
Exceptions:
1) may throw, e.g. if pointer
defines a throwing operator*
在为我的爱好实现一个基本的 std 库时 OS 我遇到了这个并想知道为什么:
operator->()
和 T* get()
都标记为 noexcept,但 operator*()
不是。根据参考,它应该等同于 *get()
,这将允许它成为 noexcept
并且查看一些实现我看不出为什么它不是。
为什么 unique_ptr
的取消引用运算符未标记为 noexcept
?
因为 operator*
对于 pointer
类型的 std::unique_ptr
可能会抛出。 pointer
类型别名是 defined as:
std::remove_reference<Deleter>::type::pointer
if that type exists, otherwiseT
*. Must satisfy NullablePointer
这可能是 T*
以外的东西,它可能是重载 operator*
的 class 类型。
typename std::add_lvalue_reference<T>::type operator*() const;
(1) (since C++11)pointer operator->() const noexcept;
(2) (since C++11)
然后:
Exceptions:
1) may throw, e.g. ifpointer
defines a throwingoperator*