C++;头文件中的接口析构函数为空 在C++中,我有一个头文件,即用空定义一个抽象类(接口) 虚拟析构函数: class I { public: virtual ~I() {} }; 问题1:空析构函数的目标代码是否将在包含I.h的每个.cpp文件的目标文件中生成 问题2:如果问题1的答案是肯定的,这是否是一个问题(不同对象文件中的相同方法)

C++;头文件中的接口析构函数为空 在C++中,我有一个头文件,即用空定义一个抽象类(接口) 虚拟析构函数: class I { public: virtual ~I() {} }; 问题1:空析构函数的目标代码是否将在包含I.h的每个.cpp文件的目标文件中生成 问题2:如果问题1的答案是肯定的,这是否是一个问题(不同对象文件中的相同方法),c++,C++,不,不会。类定义中定义的方法是自动内联的,因此无需担心 请注意,标记为inline并在二进制文件中实际内联的方法是不同的内联只是一个标记(充其量只是一个编译器提示)。尤其是使用虚拟功能。多态性保证有效,不管方法是否标记为inline。否,它不会。类定义中定义的方法是自动内联的,因此无需担心 请注意,标记为inline并在二进制文件中实际内联的方法是不同的内联只是一个标记(充其量只是一个编译器提示)。尤其是使用虚拟功能。多态性保证有效,无论方法是否标记为inline。有没有办法在类定义中定义方法而

不,不会。类定义中定义的方法是自动
内联的
,因此无需担心


请注意,标记为
inline
并在二进制文件中实际内联的方法是不同的<代码>内联只是一个标记(充其量只是一个编译器提示)。尤其是使用
虚拟
功能。多态性保证有效,不管方法是否标记为
inline

否,它不会。类定义中定义的方法是自动
内联的
,因此无需担心


请注意,标记为
inline
并在二进制文件中实际内联的方法是不同的<代码>内联只是一个标记(充其量只是一个编译器提示)。尤其是使用
虚拟
功能。多态性保证有效,无论方法是否标记为
inline

有没有办法在类定义中定义方法而不是内联的?@Giorgio:没有。它必须是内联的,才能不违反ODR。@Giorgio据我所知,标准规定类中定义的方法是内联的,所以我不这么认为。@Giorgio但请注意,这并不意味着它是内联的。请再次阅读答案。当指向子类的指针被删除时,如何使用调用的虚拟析构函数?我不完全理解如何内联调用析构函数。关于这个主题,我能读到一些资料吗?有没有办法在类定义中定义一个方法而不是内联的?@Giorgio:没有。它必须是内联的,才能不违反ODR。@Giorgio据我所知,标准规定类中定义的方法是内联的,所以我不这么认为。@Giorgio但请注意,这并不意味着它是内联的。请再次阅读答案。当指向子类的指针被删除时,如何使用调用的虚拟析构函数?我不完全理解如何内联调用析构函数。关于这个话题,有什么我可以读的材料吗?