在C++17中,新的
我的问题是:这个强制要求有什么优势?大概地说,对于可以轻松销毁的类型,编译器可以发现
std::optional
规定,如果T
是平凡析构的,则必须使其平凡析构[optional.object.dtor]:
因此,这个潜在的实现片段不符合标准。
~optional();
1 效果:如果is_trivially_destructible_v<T> != true
并且*this
包含一个值,则调用val->T::~T()
。
2 备注:如果is_trivially_destructible_v<T> == true
,则此析构函数应该是平凡析构函数。
template <class T>
struct wrong_optional {
union { T value; };
bool on;
~wrong_optional() { if (on) { value.~T(); } }
};
我的问题是:这个强制要求有什么优势?大概地说,对于可以轻松销毁的类型,编译器可以发现
value.~T()
是一个无操作,并且不为wrong_optional<T>::~wrong_optional()
生成任何代码。
std::vector
的销毁)。 - Jarod42