[英]“No-throw dereferencing” of std::unique_ptr
我用C ++編寫代碼,使用std::unique_ptr u
來處理std::string
資源,我想取消引用u
以便我可以將std::string
傳遞給std::string
拷貝構造函數的調用:
std::string* copy = new std::string( /*dereference u here*/ );
我知道new
或std::string
拷貝構造函數可以拋出,但這不是我的觀點。 我只是想知道解除引用u
是否已經拋出異常。 我發現很奇怪, operator*
沒有標記為noexcept
而std::unique_ptr
方法get
實際上標記為noexcept
。 換一種說法:
*( u.get() )
從根本上說是noexcept
*u
不是。 這是標准中的缺陷嗎? 我不明白為什么會有區別。 有任何想法嗎?
unique_ptr::operator*()
可能涉及對您在unique_ptr
存儲的類型的operator*()
重載的調用。 請注意,存儲在unique_ptr
中的類型不必是裸指針,您可以通過嵌套類型D::pointer
更改類型,其中D
是unique_ptr
的刪除器的類型。 這就是函數不是noexcept
。
這個警告不適用於您的用例,因為您在unique_ptr
存儲了std::string *
,而不是某個重載operator*
類型。 所以調用的是有效noexcept
你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.