VStudio 2012为仅移动类型的容器创建自定义分配器

时间:2015-08-26 13:47:30

标签: c++11 visual-studio-2012 stl allocator

我正在尝试创建一个仅移动类型的stl容器,该容器在VStudio 2012中使用自己的分配器。

问题是:似乎我必须为allocator提供一个构造函数,而该函数又需要访问所包含类型的公共拷贝构造函数。

我得到:

错误C2248:' std :: unique_ptr< _Ty> :: unique_ptr' :无法访问类中声明的私有成员' std :: unique_ptr< _Ty>'

错误C2039:&#39>构建' :不是' MyAllocator'

的成员

相同的代码在clang中起作用,所以我怀疑这个问题是由微软引起的,但是有人可以提出可行的解决办法吗?

这是我的最小复制代码

$(".earnContent").click(function(e) {
    $(".content").slideUp(300);
    $(this).next().slideDown(300);
});

1 个答案:

答案 0 :(得分:1)

您得到的错误是因为您尝试从对同一类型的std::unique_ptr的常量引用构造std::unique_ptr - 并且没有这样的构造函数。

您可以重新设计construct方法以获取右值参考,然后所有内容都可以很好地编译:

void construct(pointer mem, value_type&& value)
{
    std::_Construct(mem, std::move(value));      
}