理解c ++中的析构函数

时间:2012-06-24 03:10:03

标签: c++ memory-management destructor

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

  

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

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

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