我读过你的一个答案(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
A
回答
2
1)的A
析构函数应该知道如何摧毁C
因为A
可能包含auto_ptr
到C
。 auto_ptr
当包含对象死亡时,预计会死亡。因此,A
的析构函数应该知道如何销毁一个C
。
2)关键是析构函数定义只写在.cpp文件中。这意味着对析构函数的调用链接到从.cpp文件编译的对象。当.cpp文件被编译时,它可以访问C的定义(这就是写在答案中的内容)。因此,.cpp文件中的析构函数可以根据需要摧毁C,而不会破坏C,因为在编译器只看到class C
的正向声明的地方没有定义和/或定义析构函数。
而且,看到
相关问题
- 1. 类析构函数C++
- 2. C++ 2构造函数和类中的析构函数
- 3. C++类的构造函数和析构函数
- 4. 构造函数和析构函数 - C++
- 5. C++抽象基类的构造函数/析构函数 - 一般正确性
- 6. EventHandlers和C#类析构函数/ Dispose
- 7. C++中的析构函数
- 8. C++的析构函数
- 9. C++中的析构函数
- 10. C中的析构函数#
- 11. C++一个类的默认构造函数调用另一个类的另一个默认构造函数
- 12. C中的析构函数和构造函数C
- 13. C++中的构造函数和析构函数与C#比较
- 14. C++析构函数异常
- 15. C++虚拟析构函数
- 16. 析构函数在C++
- 17. C++,与析构函数
- 18. 析构函数LinkedListelement在C++
- 19. lua userdata C++析构函数
- 20. C++析构函数代码
- 21. C++需要析构函数
- 22. C++:CRTP析构函数?
- 23. C++虚拟析构函数
- 24. C++新手:析构函数
- 25. C++析构函数示例
- 26. 模板类析构函数
- 27. 析构函数类再次
- 28. 堆和类析构函数
- 29. 析构函数无类
- 30. C++ thread_local析构函数与pthread析构函数
非常感谢,我知道了 – Victoria