gpt4 book ai didi

c++ - 主动调用析构函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:51 25 4
gpt4 key购买 nike

在这篇文章中:

C++ Pointer: changing the contents without changing the address?

用户 Eric Postpischil 提出了一个他主动调用类的析构函数的答案。合法吗?它被认为是好的编程吗?

我问的原因是,在我的一节课上,我的老师说这是被禁止的,我们永远不应该这样做,他错了吗?

帖子中的问题和答案本身,虽然很有趣,但与我的问题并没有真正相关。

最佳答案

好吧,就像动态对象的创建过程可以“拆解”成两个阶段:原始内存分配和实际初始化(例如通过 placement-new 调用构造函数)一样,动态对象的销毁过程也可以是“反汇编”分为两个阶段:实际去初始化(析构函数调用)和原始内存释放。 (如您所见,这两个进程互为镜像。)

这在您想使用自己的原始内存分配/释放机制的情况下非常有用。诚然,在许多情况下您可以通过重载 operator new/delete 来达到预期的效果,但在某些情况下它不够灵活,您可能更愿意明确地执行上述步骤。

所以,这里有一个例子说明直接析构函数调用何时是一项有用的功能。还有很多其他的。是的,这是完全合法的。

当您的类主任说您永远不应该这样做时,他/她的意思可能是您现在应该在当前类(class)范围内避免这样做。随着你学习的进步,你会明白很多“你永远不应该那样做”的技巧实际上是非常有用的技巧,属于“如果你知道自己在做什么,就去做”的范畴。当然,你不应该滥用这种技术,因为它确实是一种低级技术。

附言这种语法正式称为-析构函数调用,因为它允许您“调用”不存在的析构函数

typedef int INT;

INT i;
i.~INT(); // <- legal code, pseudo-destructor call, no op

以上是合法的 C++ 代码,尽管 INT 不是类类型,因此没有析构函数。 (只是不要尝试执行 i.~int() - 这是非法的。别名必须用于非类类型。)

关于c++ - 主动调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16950828/

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