所以我一直在考虑 PIMPL 和堆栈分配。我一直在编写一个库,并决定使用 PIMPL 来隐藏该类的私有成员。这意味着我会有一个像这样声明的类
class Foo {
private:
class Handle;
std::tr1::shared_ptr<Handle> handle;
public:
Foo();
};
这很简单。但是然后在构造函数中你这样做
Foo::Foo() : handle(new Handle()) {}
因此,当有人使用我的库在堆栈上创建 Foo 时,他们本质上是在进行堆分配。这是您在使用 PIMPL 时必须接受的权衡吗?我想在构造函数旁边发布带有警告的文档:“警告:这会导致堆分配”或类似的东西。
我的另一个想法是让所有暴露给实现的类作为纯虚拟接口和一大堆返回智能指针的静态工厂方法。这也意味着堆分配,但没有任何技巧。
有什么想法或建议吗?我是否过分考虑使用我的库的程序员?