gpt4 book ai didi

c++ - 在什么情况下 std::unique_ptr::operator[] 可能抛出?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:00 25 4
gpt4 key购买 nike

我的类有一个operator[],它所做的就是在unique_ptr上调用std::unique_ptr::operator[] > 成员(member)。相关部分就是这样:

template <typename T> struct Foo {
T& operator [](const size_t pos) const noexcept
{
return data_[pos];
}

std::unique_ptr<T[]> data_;
};

我已将运算符标记为 noexcept。但是,unique_ptr::operator[] 不是 noexcept。我无法找出原因,也不知道我是否可以假设它永远不会抛出。 unique_ptr::operator[] 本身没有在文档中列出任何异常(cppreference 和 MSDN 声称它没有定义它可能抛出的任何异常列表。)

所以我假设缺少的 noexcept 可能是:a) 一个错误,或者 b) 运算符访问的基础数据类型可能会抛出异常。选项 a 会很好,因为这意味着我可以标记我自己的运算符 noexcept。选项 b 会很难理解,因为所有运算符(operator)都会得到一个引用,但不会调用任何东西。

所以,长话短说,unique_ptr::operator[] 有没有可能抛出异常,从 noexcept 函数调用它是否安全?

最佳答案

So, long story short, is there any possibility of unique_ptr::operator[] ever throwing

是的。它将简单地在它拥有的指针类型上使用 []。那可能会抛出。回想一下,由于删除体操,指针类型不必是实际指针。它可以是具有自己的 operator[] 重载的用户定义对象类型,可能会引发越界使用。

关于c++ - 在什么情况下 std::unique_ptr::operator[] 可能抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272422/

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