类析构函数的实际应用

Pai*_*guy 4 c++ constructor destructor class uses

我目前正在尝试学习类和构造函数/析构函数.我明白这两者是做什么的,但是我在使用析构函数时遇到了困难,因为我无法想到它的实际应用.

任何人都可以提供一个解释的例子吗?

Alo*_*ave 10

析构函数是用于释放对象分配的任何资源的特殊成员函数.

最常见的示例是类的构造函数使用时new,析构函数用于delete释放内存.

class Myclass
{
    int *m_ptr;
    public:
        Myclass():m_ptr(new int)
        {
        }
        ~Myclass()
        {
             delete m_ptr;
        }
        //ToDo: Follow Rule of Three
        //Provide definitions for copy constructor & copy assignment operator as well

};
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 7

析构函数可能是c ++最重要的方面,它为您管理资源,并允许您添加代码来处理任何特殊的清理,例如句柄释放,断开连接,DB等.Bjarne Stroustup还声明这是一件好事关于析构函数:

也出现了积极的意外.最引人注目的是在与资源管理和错误处理(使用例外)相关的技术中普遍使用析构函数.我知道析构函数是一个好主意 - 毕竟,你必须扭转构造函数的作用 - 但我没有意识到它们对于善用C++有多重要.

原始文章:http://msdn.microsoft.com/en-us/magazine/cc500572.aspx

对于成语RAII(资源获取是初始化)也很重要,Bjarne在本文中对此进行了解释:http: //www.artima.com/intv/modern3.html

你可以在析构函数上阅读这个C++ faq,它可以为你提供更多帮助.

我认为Als代码示例是一个很好的例子,你也可以看一下维基百科文章中的代码示例,这也是另一个例子.当对象超出范围或被调用时调用析构函数这一事实delete非常有用.我使用的是一个计时器对象类来计算某些函数调用需要多长时间:

class myTimer
{
  mytimer():startTime( TimeNow() )
  {}
  ~myTimer()
  { 
    printf("time taken :%I64d", TimeNow() - startTime);
  }
private:
  __int64 startTime;
};
Run Code Online (Sandbox Code Playgroud)

所以在我的代码中我会做这样的事情

myClass::myFunction()
{
  myTimer timer; // initiliases time to Now.

  someOtherFunc();
} // mytimer object is now out of scope and the destructor is called and prints the time it took
Run Code Online (Sandbox Code Playgroud)