Ich lerne, wie bedingte noexcept
zu verwenden und auf dieses Problem stoßen. Angenommen, ich habe eine Klasse:noexcept Ausdruck vs Typ Merkmale
template<typename T>
class Wrapper {
public:
Wrapper(T&& value) noexcept(/* ??? */)
: value_(std::move(value))
{}
private:
T value_;
};
Für den /* ??? */
Teil, ich dachte, dass wir entweder noexcept(T(std::move(value)))
oder std::is_nothrow_move_constructible<T>::value
verwenden können, bis ich auf this stolperte.
Also, wenn ich noexcept(noexcept(T(std::move(value))))
verwenden, streng genommen Ich sage, dass „dieser Konstruktor ist noexcept
iff Bau und zerstörenden ein T
ist noexcept
“?
Obwohl Destruktoren, die werfen, sollten in Brand gesteckt und verbrannt werden.
Können Sie umgehen dies mit z. 'noexcept (neues T (std :: move (value)))' oder etwas? Da es sich um einen unausgewerteten Ausdruck handelt, wird nicht wirklich etwas zugewiesen, sondern es sollte speziell "undicht" sein und so sollte der dtor nicht beteiligt sein ... Ich schätze, du musst vielleicht eine neue Version von new verwenden, da du t wollen 'std :: bad_alloc' erkennen. –