c++编程技巧--Pimpl

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++

你可能感兴趣的:(C++,c++,开发语言)