簡體   English   中英

std :: unique_ptr的“無法解除引用”

[英]“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*/ );

我知道newstd::string拷貝構造函數可以拋出,但這不是我的觀點。 我只是想知道解除引用u是否已經拋出異常。 我發現很奇怪, operator* 沒有標記為noexceptstd::unique_ptr方法get實際上標記為noexcept 換一種說法:

*( u.get() )

從根本上說是noexcept

*u

不是。 這是標准中的缺陷嗎? 我不明白為什么會有區別。 有任何想法嗎?

unique_ptr::operator*()可能涉及對您在unique_ptr存儲的類型的operator*()重載的調用。 請注意,存儲在unique_ptr中的類型不必是裸指針,您可以通過嵌套類型D::pointer更改類型,其中Dunique_ptr的刪除器的類型。 這就是函數不是noexcept

這個警告不適用於您的用例,因為您在unique_ptr存儲了std::string * ,而不是某個重載operator*類型。 所以調用的是有效noexcept你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM