2013-04-15 30 views
1

在C++中调用一个特定对象的文件析构函数时,析构函数首先取消初始化该对象,然后删除该对象。取消初始化对象意味着什么?

我没有得到的是什么意思_de_initialize对象。这是什么意思,会发生什么?

+3

什么文章/书/人,您在去?该标准没有提到“去初始化”(或“未初始化”)。 – chris

+0

在C++中,deinitializer与deconstructor完全一样 - 一个错误的,误用的术语。 – dtech

+0

这可能意味着您可以在删除之前清除用于敏感数据(如密码)的数组。这不是在语言标准中找到的术语。 – EJP

回答

3

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

或者您可能正在做某件事来表示Windows HANDLE或UNIX文件描述符。当你的对象被删除时,你可能想关闭那个句柄或文件描述符。同样,析构函数是做这件事的地方。

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

2

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

1

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

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

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

Instantiation 
    Constructor 
     Initialization 
     Usage 
     De-initialization 
    Destructor 
Deletion