2013-07-28 95 views
2

我读过你的一个答案(Will an 'empty' constructor or destructor do the same thing as the generated one?)。你写道:“我们假设类型C的对象是在.cpp文件中A的构造函数的定义中创建的,它也包含了struct C的定义。现在,如果你使用struct A并且需要销毁一个A对象,编译器将提供一个析构函数的隐式定义,就像上面的情况一样,这个析构函数也会隐式地调用auto_ptr对象的析构函数,并且会删除指向C对象的指针 - 而不知道C!的定义出现在定义了结构A的构造函数的.cpp文件中“。你能否为我解释两件事: 1.为什么A的析构函数知道C的定义? 2.添加A的空析构函数如何帮助sityation? 谢谢C++,一个类的空析构函数

回答

2

1)的A析构函数应该知道如何摧毁C因为A可能包含auto_ptrCauto_ptr当包含对象死亡时,预计会死亡。因此,A的析构函数应该知道如何销毁一个C

2)关键是析构函数定义只写在.cpp文件中。这意味着对析构函数的调用链接到从.cpp文件编译的对象。当.cpp文件被编译时,它可以访问C的定义(这就是写在答案中的内容)。因此,.cpp文件中的析构函数可以根据需要摧毁C,而不会破坏C,因为在编译器只看到class C的正向声明的地方没有定义和/或定义析构函数。

而且,看到

The relation between Forward declaration and destructors

+0

非常感谢,我知道了 – Victoria