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)
析构函数可能是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)