自定義分配器,特別是定製allocate/deallocate
方法的能力非常有用 - 可以控制某些性能關鍵區域中使用的低級內存分配策略。基於節點的容器的Pooled allocators,以及fixed-size allocators是一些想到的例子。何時在分配器中使用自定義構造/銷燬方法有用?
但是什麼時候定義自定義construct/destroy
方法很有用?
據我瞭解,該標準規定,這些方法具有作爲安置new
和明確的破壞,即同樣的效果:
//construct should give the same effect as:
construct (_Type *_ptr, _Type const&_val)
{
new(_ptr) _Type(_val);
}
//destroy should give the same effect as:
destroy (_Type *_ptr)
{
_ptr->~_Type();
}
有什麼辦法來實現以另一種方式這些方法 - 不使用位置new
和明確的破壞?如果不是,他們爲什麼是分配器對象的一部分?如果每個人都直接使用new
放置和直接銷燬,這難道不會更容易嗎?
'構造函數也許可以做*別的*除了*新的位置。這是一個定製點,如果你需要它,這是一件好事。 – 2012-03-18 04:34:15
@BoPersson:有什麼「別的東西」會是一個實際的例子嗎?我還沒有想出任何不會更好地放置在實際對象類型本身的'ctor/dtor'中的......另外,如果'construct/destroy'確實做了與普通對象創建/銷燬不同的事情,在堆棧上創建的本地對象的行爲將與通過分配器創建的行爲不同。這是否合理? – 2012-03-18 04:45:03
這是在分配器中具有此功能的一個原因。當容器存儲在共享內存中時,可能需要特殊的* *。它*允許包含的對象與堆棧對象不同。 – 2012-03-18 04:49:02