其他分享
首页 > 其他分享> > c – 在std :: allocator rebind上传输对象所有权

c – 在std :: allocator rebind上传输对象所有权

作者:互联网

我有一个Visual Studio 2008 C应用程序,我正在实现替换std :: vector等容器中使用的标准分配器.但是,我遇到了一个问题.我的实现依赖于拥有资源句柄的分配器.在使用重新绑定功能的情况下,我需要将句柄的所有权转移到新的分配器.像这样的东西:

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.如果我从重新绑定构造函数中删除const,那么容器将不接受它.

error C2558: class 'MyAllocator<T>' : no copy constructor available or copy constructor is declared 'explicit'

这个问题有好办法吗?

谢谢,

PaulH

解决方法:

如果你声明h_是可变的会怎么样?

标签:allocator,c,standard-library
来源: https://codeday.me/bug/20190903/1797411.html