我有一個Visual Studio 2008 C++應用程序,我正在實現替換容器中使用的標準分配器,如std::vector
。但是,我遇到了一個問題。我的實現依賴於擁有資源句柄的分配器。在使用rebind
功能的情況下,我需要將句柄的所有權轉移給新的分配器。事情是這樣的:在std :: allocator上傳遞對象的所有權rebind
template< class T >
class MyAllocator
{
public:
template< class U >
explicit MyAllocator(const MyAllocator<U>& other) throw()
: h_(other.Detach()) // can't do this to a `const`
{
};
// ...
private:
HANDLE Detach()
{
HANDLE h = h_;
h_ = NULL;
return h;
};
HANDLE h_;
}; // class MyAllocator
不幸的是,我不能,因爲它是const
緩解手柄所有權的老分配器。如果我從rebind構造函數中刪除const
,那麼容器將不會接受它。
error C2558: class 'MyAllocator<T>' : no copy constructor available or copy constructor is declared 'explicit'
是否有解決此問題的好方法?
感謝,
PaulH
不需要分配器不需要狀態?關於分配器的經典文章,Matt Austern,IIRC,但我現在找不到它... – sbi 2011-05-09 19:32:54
這裏是文章:[http://drdobbs.com/cpp/184403759](http://drdobbs。 COM/CPP/184403759)。從快速瀏覽[this discussion](http://gcc.gnu.org/ml/libstdc++/2004-10/msg00303.html),似乎確實支持有狀態分配器,儘管std lib實現支持用於成爲一個問題。 – sbi 2011-05-09 19:36:10
@sbi - 感謝您的文章和討論。我打算跟進一個關於如何處理'std :: swap'的問題。 – PaulH 2011-05-09 19:44:03