Impl模式实现之注意内联

最近学习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:

如果您觉得我的文章对您有帮助,可以扫码领取下红包,谢谢!

Impl模式实现之注意内联

上一篇:Java学习笔记之I/O


下一篇:EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之多方式虚拟直播