最近学习muduo源码时,对于内联函数有了更深刻的认知.
内联(inline)在代码执行方面具有优势,但是有时使用不当,或者稍微不注意,就会造成编译错误.
以下将通过Impl实现说明一二:
头文件:
#ifndef MUDUO_TEMP_H
#define MUDUO_TEMP_H #include <memory> class Temp
{
public:
Temp();
~Temp(); private:
class Impl;
std::unique_ptr<Impl> impl_;
}; #endif //MUDUO_TEMP_H
源文件:
#include "Temp.h" class Temp::Impl
{
public:
Impl() = default; ~Impl() = default;
}; Temp::Temp()
: impl_(new Impl())
{ } Temp::~Temp()
{ }
解释:
(1)构造函数在源文件实现,比较容易理解,因为在头文件中并未具体实现Impl,无法通过new创建Impl实例;
(2)尽管析构函数是空的,但是也必须放在源文件中进行定义,否则编译期隐式声明的~Temp() inline展开的时候无法寻找到Impl()::~Impl的声明,会出现编译报错.
PS:
如果您觉得我的文章对您有帮助,可以扫码领取下红包,谢谢!