所以我一直在思考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