在c++中为特定对象调用析构函数时,析构函数首先对该对象进行反初始化,然后删除该对象。
我不明白的是_de_initialize对象是什么意思。这意味着什么,会发生什么?
假设您正在重写std::string
。它在管理一个动态分配的char
数组。当字符串对象被删除时,您希望char
数组也被释放。析构函数就是这样做的地方。
或者您正在制作一些东西来表示Windows HANDLE
或UNIX文件描述符。当对象被删除时,您可能希望关闭该句柄或文件描述符。同样,析构函数就是这样做的地方。
一般来说,析构函数是释放与该对象相关的资源的地方,无论这些资源是什么
在标准中从未提到过"去初始化"这个词。至于这意味着什么,它意味着对象释放任何文件句柄,释放资源,等等。
我认为这种混淆可能是由于一些库在API强制执行init()
方法,该方法通常在构造函数的最后一行调用,在处理所有动态数据和可能的连接之后。
在我看来,这只是对象构造的一部分,init()
方法主要是一种清理代码的方法,因为没有人喜欢构造函数的代码墙。我经常创建initGUI()
和initConnections()
方法来保持构造函数的整洁。
在需要取消初始化的情况下,以相反的顺序执行是一个好主意。我的意思是,如果初始化是构造函数的最后一行,那么它很可能也应该是析构函数的第一行:
Instantiation
Constructor
Initialization
Usage
De-initialization
Destructor
Deletion