gpt4 book ai didi

c++ - std::unique_ptr 的 "No-throw dereferencing"

转载 作者:可可西里 更新时间:2023-11-01 18:28:09 26 4
gpt4 key购买 nike

我用 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* not 标记为 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 * 而不是重载 的某种类型运算符*。所以这个调用对你来说实际上是 noexcept

关于c++ - std::unique_ptr 的 "No-throw dereferencing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com