为什么内联构造函数和析构函数在C++中不是一个好主意?

Nik*_*iya 16 c++ constructor destructor inline

我记得在其中一本C++书籍(很久以前)中读到,内联构造函数和析构函数尤其适用于派生类并不是一个好主意.我理解内联会导致一些膨胀的目标代码,但有没有其他设计考虑因素阻碍内联构造函数和析构函数?当然,大多数编译器可能会拒绝内联并继续创建一个函数体,但如果他们要内联可能需要支付的惩罚?

joh*_*ohn 36

编译器可以自由内联您未声明内联的代码,并且可以自由地不内联您声明的内联代码.我见过编译器会做这两件事.因此,内联关键字并不意味着大多数人认为它的作用.它的意思是允许对一个定义规则的异常,因此您可以将函数等放在头文件中而不会出现链接器错误.

所以建议是垃圾,让编译器决定什么是最好的内联和什么不是.将内联放在需要它的地方以防止链接器错误,就是这样.

  • @ s1n实际上没有.关于编译器必须如何使用`volatile`变量存在限制,这意味着这样的变量将保持"易失性".`volatile`不是这方面的建议. (10认同)

Oli*_*rth 5

我不了解构造函数,但析构函数却很常见virtual。在大多数情况下,编译器内联虚拟函数是没有意义的,因为直到运行时才知道将调用哪个重写。


n. *_* m. 5

绝对没有任何理由避免使用内联构造函数和析构函数。这本书是错误的。


Alo*_*ave 5

除了@oli 在他的回答中提到的原因:

这本书可能会指导不要内联构造函数和析构函数,因为即使看似微不足道或空的函数也可能经常包含大量由编译器隐式生成的代码,而实际的函数定义最终可能会非常大,这可能会导致代码膨胀。

话虽如此,让编译器实际决定是否内联函数调用(甚至是构造函数和析构函数)是明智的,大多数现代编译器都会通过内联适当地优化函数。