了解 C++ 中的析构函数

understanding destructor in c++

本文关键字:析构函数 C++ 了解      更新时间:2023-10-16

众所周知,当函数返回时,堆栈分配的对象将被回收,并且在此之前将调用关联的析构函数。我的问题是:如何确定表示对象的内存位置,以便我们可以调用析构函数?这样做会产生任何运行时开销吗?

我不确定你在问什么,但是堆栈分配对象的内存位置在编译时是已知的。 没有运行时开销来确定它们的位置。

堆栈分配对象的位置计算为当前堆栈指针位置的偏移量,因此实际上不需要计算。

与堆分配对象不同,动态内存管理器必须决定对象的分配位置,堆栈只是线性的,并根据需要增长,例如,在编译时,编译器将知道对象驻留在当前指针上减去指定的字节数,并且每当需要该变量时,将在整个二进制代码中使用该值。

如何确定内存位置来表示对象,以便我们可以调用析构函数?

内存位置不确定何时调用构造函数。编译器知道在堆栈上分配了哪些变量,并创建适当的代码来调用相应的析构函数。

至少,它们通常在堆栈上。关键是无论内存存储在何处,都可以使用相同的逻辑。存储在堆栈上只是意味着需要以一种或另一种方式调用它们。