自由功能allocate_shared可與任何符合標準的分配器一起使用。但是shared_ptr的構造函數和重置方法呢?Boost shared_ptr:如何使用自定義刪除器和分配器
template<class Y, class D, class A> shared_ptr(Y * p, D d, A a);
template<class Y, class D, class A> void reset(Y * p, D d, A a);
手冊說d應提供將用於刪除指針和甲必須是符合標準規範的分配器的呼叫操作員。如果是這樣,爲什麼需要D?不能A做分配和分配? 您不認爲爲每個自定義分配器提供刪除器的要求使上述方法幾乎無用嗎?當我使用自定義分配器時,我去找allocate_shared。我怎麼知道什麼是釋放自定義分配器分配內存的正確方法?
編輯:後一些實驗用逐字分配器和一個刪除器我想出傳遞給的shared_ptr的構造和工廠功能分配器allocate_shared用於分配的shared_ptr的內部結構僅限。 allocate_shared從不使用傳遞的分配器來分配共享對象。我認爲boost手冊可以解釋如何更明確地使用分配器。
部分是不正確的。 'allocate_shared'不僅用於'shared_ptr'控制塊的分配器,還用於對象本身!它利用'allocator :: rebind'來獲得一個「兄弟分配器」,它將分配足夠大的內存塊來保存對象以及其控制塊。 – 2012-05-07 09:57:30