析构函数的功能

时间:2013-11-23 21:07:03

标签: c++ destructor

对于这样一个简单的类:

class X {
public:
//...
private:
int *ptr;
};

X::~X() {
delete ptr;
}

我编写了一个析构函数来释放ptr指向的内存。现在,我想知道,如果我的析构函数保持这样,ptr何时被实际销毁?

由于

4 个答案:

答案 0 :(得分:2)

我认为this article可能会回答您的大部分问题

  

“在自动对象(本地对象)中隐式调用析构函数   已声明为auto或register,或未声明为的对象   static或extern)或临时对象超出范围。他们是   在程序终止时隐式调用构造的外部和   静态对象。使用删除时会调用析构函数   使用new运算符创建的对象的运算符。“

更具体地说:

  

“基类和成员的析构函数反过来调用   完成构造函数的顺序:

     

在析构函数之前调用类对象的析构函数   成员和基地被称为。

     

非析构成员的析构函数在析构函数之前调用   基类被称为。

     

在析构函数之前调用非虚基类的析构函数   对于虚拟基类的调用。“

答案 1 :(得分:1)

delete调用正在删除的对象的析构函数,然后释放它占用的内存。

答案 2 :(得分:1)

析构函数将调用特定实例所在范围的末尾。

答案 3 :(得分:0)

当对象超出范围时,将销毁给定X实例的本地版本的ptr。例如:

int main()
{
    X obj;

    for (int i=0; i<10; i++) {
        X tmp;

        // do work with tmp
        ...

        // tmp goes out of scope here
        // the destructor tmp::~X will be called here, immediately after each iteration ends
    }

    // obj goes out of scope here
    // the destructor obj::~X called when the program ends
}