所以我一直在思考PIMPL和堆栈分配。我一直在写图书馆,并决定使用PIMPL来隐藏课程的私人成员。这意味着我会有一个这样的声明PIMPL和堆栈分配
class Foo {
private:
class Handle;
std::tr1::shared_ptr<Handle> handle;
public:
Foo();
};
这是非常简单的。但随后在构造函数中完成此
Foo::Foo() : handle(new Handle()) {}
因此,当有人使用我的图书馆在栈上创建了一个富,他们基本上是做一个堆分配反正。这是在使用PIMPL时必须权衡的折衷?我想在构造函数旁边发布一个警告文件:“警告:这会导致堆分配”或其他。
我的另一个想法是将所有暴露于实现的类作为纯虚拟接口和一大堆静态工厂方法返回智能指针。这也意味着堆分配,但没有技巧。
任何想法或建议?我是否过度体贴使用我的图书馆的程序员?
这样的警告的问题是大量的操作导致堆分配。创建一个'std :: vector'也可以。或者调整一个。权衡隐藏类的内部是多么重要,而避免堆分配的额外表现。 – jalf 2010-07-11 06:51:38