0

在 C++ 中,为特定对象调用析构函数,析构函数首先取消初始化该对象,然后删除该对象。

我不明白 _de_initialize 对象的含义。这是什么意思,会发生什么?

4

3 回答 3

3

想象一下你正在重写std::string。它正在管理一个char动态分配的数组。当字符串对象被删除时,您希望char数组也被释放。析构函数就是这样做的地方。

或者,您可能正在制作一些东西来表示 WindowsHANDLE或 UNIX 文件描述符。当您的对象被删除时,您可能想要关闭该句柄或文件描述符。同样,析构函数是这样做的地方。

通常,析构函数是释放与该对象关联的资源的地方,无论这些资源可能是什么。

于 2013-04-15T02:15:47.823 回答
2

标准中从未提及去初始化这个词。至于这意味着什么,这意味着该对象释放任何文件句柄,释放资源等。

于 2013-04-15T02:16:56.277 回答
2

我认为混淆可能是由于一些库具有init()由 API 强制执行的方法,通常在构造函数的最后一行调用,在处理所有动态数据和可能的连接之后。

IMO,这只是对象构造的一部分,该init()方法主要是一种清理代码的方法,因为没有人喜欢构造函数的代码墙。我经常创建initGUI()initConnections()保持构造函数清洁的方法。

如果需要取消初始化,最好以相反的顺序进行。我的意思是,如果初始化是构造函数的最后一行,它很可能也应该是析构函数的第一行:

Instantiation
   Constructor 
      Initialization
         Usage
      De-initialization
   Destructor
Deletion
于 2013-04-15T02:31:10.540 回答