【问题标题】:C++, an empty destructor for a classC++,类的空析构函数
【发布时间】:2013-07-28 12:24:27
【问题描述】:

我已阅读您的一个答案 (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 的定义! 出现在 .cpp 文件中,其中定义了 struct A 的构造函数”。你能为我解释两件事吗: 1.为什么A的析构函数要知道C的定义? 2.添加A的空析构函数对定位有什么帮助? 谢谢

【问题讨论】:

    标签: c++ explicit-destructor-call


    【解决方案1】:

    1) A 的析构函数应该知道如何销毁C,因为A 可能包含auto_ptrC。当包含对象死亡时,auto_ptr'd 对象预计会死亡。所以A的析构函数应该知道如何销毁C

    2) 关键是析构函数定义只写在.cpp文件中。这意味着对析构函数的调用链接到从 .cpp 文件编译的对象。编译 .cpp 文件时,它可以访问 C 的定义(即答案中所写的内容)。因此,.cpp 文件中的析构函数可以根据需要析构 C,而不是像在编译器仅看到 class C 的前向声明时未定义和/或定义析构函数的情况那样无法析构 C。

    另见

    The relation between Forward declaration and destructors

    【讨论】:

    • 非常感谢,我知道了
    猜你喜欢
    • 2011-09-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2019-08-08
    • 2015-04-30
    相关资源
    最近更新 更多