Pimpl(Pointer to implementation)是一种常见的编程技巧,它将一个类的私有实现细节隐藏在一个单独的类中,以便保护公共接口免受不必要的更改。然而,使用Pimpl会导致额外的开销和内存分配,因此需要寻找其他替代方案。
一个替代Pimpl的方法是使用Opaque pointer(不透明指针)。Opaque pointer和Pimpl有类似的思想,但不同之处在于它不需要在堆上分配内存,因此没有额外的开销。简单地说,就是在头文件中定义一个结构体或类,其中只含有一个指针,将其作为类的私有成员变量,并在源文件中实现其具体逻辑。
以下是使用Opaque pointer来替代Pimpl的示例代码:
Foo.h
class Foo {
public:
Foo();
~Foo();
void doSomething();
private:
struct FooImpl;
FooImpl* mFooImpl;
};
Foo.cpp
struct Foo::FooImpl {
// implementation details
};
Foo::Foo() : mFooImpl(new FooImpl{}) {}
Foo::~Foo() {
delete mFooImpl;
}
void Foo::doSomething() {
// use mFooImpl to do something
}
在以上代码中,Foo的定义中只含有一个指向FooImpl类的指针,这个指针不再是一个完整的类的实例,并通过delete关键字来释放它的内存。FooImpl类本身的定义则在源文件中实现,而不需要暴露给头文件。
这种解决方法的好处是:避免了额外的开销,保护了类的私有实现细节,同时提高了代码的可读性和可维护性。
上一篇:Alternativestoprintf()forMISRAC:2004compliantcode
下一篇:AlternativewaytowriteaHaskellfunctionofsingleinputandoutputofthiskind