gpt4 book ai didi

c++ - 删除完整的类类型会导致未定义的行为吗?

转载 作者:太空狗 更新时间:2023-10-29 19:51:36 28 4
gpt4 key购买 nike

我发现自己在理解 5.3.5$5 中引用自 C++ 标准的以下句子时遇到了麻烦:(强调是我的)

If the object being deleted has incomplete class type at the point of deletion and the complete class has a non-trivial destructor or a deallocation function, the behavior is undefined.

我知道这个删除不完整类型的问题已经在SO中讨论过好几次了,我可以理解为什么删除不完整的类类型是未定义的行为。这Q&A解释得很好。

我无法理解的是关于完整类类型的部分。这是否意味着删除具有非平凡析构函数或释放函数的完整类的对象是未定义的行为?如果是这样,请提供一些代码来说明它可能导致的未定义行为。

最佳答案

在相关案例中,未定义行为有两个先决条件:

  1. 正在通过指向不完整类型的指针删除对象;
  2. 被删除对象的完整类具有非平凡的析构函数或(用户定义的)释放函数。

如果这些条件中的任何一个为假,则不存在未定义的行为(至少由于正在讨论的问题)。

这特别意味着

  1. 删除完整类型的对象是安全的(因为将执行正确的析构函数和/或释放函数)。

  2. 通过指向不完整类型的指针删除具有普通析构函数且没有用户定义的释放函数的对象是安全的(因为在没有完整类型信息的情况下,编译器不会调用析构函数并使用默认的释放函数,它完全匹配通过指向完整类型的指针执行删除时会发生的情况。

关于c++ - 删除完整的类类型会导致未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39503203/

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