c++编程技巧--Pimpl

Pimpl(Pointer to Implementation)是一种C++编程技巧,用于提高编译速度并隐藏类的实现细节。通过将类的成员变量封装为私有的智能指针,可以避免因头文件改变导致的频繁编译,并保护接口不被用户直接访问。本文介绍了如何使用Pimpl模式,并展示了如何在类B中应用此技巧来改进设计。
摘要由CSDN通过智能技术生成

Pimpl:Pointer to implementation是一种编程技巧。这种方法主要有两个优势:增加编译速度,隐藏接口细节。
例如有一个接口是这样的:

class B
{
public:
	B();
	~B();
	void f();
private:
	int a;
	std::string b;
	std::vector<int>vec;
    
	
};

需要提供给用户,但是用户可能根据我定义的变量猜到我的具体实现,或者我需要新增成员变量时,需要重新提供头文件。
这时,Pimpl就派上用场了:把成员变量封装成一个指针变量

//.h文件
class B
{
public:
	B();
	~B();
	void f();
private:
	class PrivateMembers;
	std::unique_ptr<PrivateMembers> pm_ptr_;
	
};

实现文件:

//cpp文件
#include "pch.h"
#include "B.h"

class B::PrivateMembers
{
public:
	PrivateMembers() = default;
	~PrivateMembers() = default;

	int a;
	std::string b;
	std::vector<int>vec;
};
//
B::B():pm_ptr_(std::make_unique<PrivateMembers>())
{
}

//析构函数必须在cpp文件中,具体原因参考modern effective c++
B::~B()
{
}

void B::f()
{
	std::cout << pm_ptr_->a << std::endl;
}

参考:
1
modern effective c++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值