gpt4 book ai didi

c++ - 在调用析构函数之前是否有任何实际理由来检查某物是否可破坏?

转载 作者:行者123 更新时间:2023-12-01 14:03:55 24 4
gpt4 key购买 nike

所以我一直在尝试实现一个变体/标记的 union 类,并且需要一种方法来编写通用析构函数,并犯了我认为是一个愚蠢的错误,忘记了某些类型没有析构函数,做类似的事情

template<typename T> 
void destruct(T& thing) {
thing.~T();
}

然而,即使对于没有析构函数的类型,如 int,这也能正常工作。或 struct A {int b;}; .我仍然认为使用这样的东西更具可读性和更容易推理
template<typename T>
void destruct(T& thing) {
if constexpr(std::is_destructible<T>::value) {
thing.~T();
}
}

但是代码之间实际上有什么区别吗?第一个感觉非常不确定的行为/对我来说是错误的。

最佳答案

Yet, this worked fine even with types that didn't have destructors, like int or struct A {int b;};



这些是可简单破坏的类型的示例。调用它们的“析构函数”是明确定义的。它没有任何影响。

But is there actually any difference between the code?



仅适用于不可破坏的类型。平凡可破坏的类型是可破坏的。

对于不可破坏的类型,例如 void 、函数类型或带有 ~T() = delete; 的类型,第一个函数是非良构的,而后者是良构的,具有空体。这取决于哪个用例更有用,但默默无视试图破坏不可破坏的东西对我来说似乎很可疑。

关于c++ - 在调用析构函数之前是否有任何实际理由来检查某物是否可破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62157814/

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