gpt4 book ai didi

c++ - 复制构造函数中初始化列表中的 make_unique 是不使用 noexcept 说明符的良好目的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:30 28 4
gpt4 key购买 nike

我的复制构造函数旁边有一个 noexcept 说明符。

#include <memory>
#include <vector>

class Foo final {
public:
Foo() noexcept = default;
Foo(const Foo& oth) : impl_(std::make_unique<Foo::Impl>()) {} // <---
~Foo() noexcept = default;

private:
class Impl;
std::unique_ptr<Impl> impl_;
};

class Foo::Impl {
...
private:
std::vector<int> some_data;
}

std::make_unique 可以抛出 bad_alloc 时,我不确定是否应该将 noexcept 放在复制构造函数旁边。

我们将不胜感激!

最佳答案

cpp 编码指南在 E.12: Use noexcept when exiting a function because of a throw is impossible or unacceptable 中对此非常清楚

因此,您可以使用 noexcept,即使该函数/ctor 的调用可能会导致异常,如果该异常会 - 在您看来 - 导致您的应用程序处于不可处理的状态。

指南中的示例:

vector<double> munge(const vector<double>& v) noexcept
{
vector<double> v2(v.size());
// ... do something ...
}

The noexcept here states that I am not willing or able to handle the situation where I cannot construct the local vector. That is, I consider memory exhaustion a serious design error (on par with hardware failures) so that I'm willing to crash the program if it happens.

因此,如果 Foo 的构造失败,可以使用 try-catch block 来处理而不会出现严重问题。那么你不会在那里使用 noexcept

关于c++ - 复制构造函数中初始化列表中的 make_unique 是不使用 noexcept 说明符的良好目的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54361259/

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