自定义矢量不支持unique_ptr

Som*_*mar -1 c++ vector unique-ptr c++11

所以我使用的自定义矢量容器来自:https://github.com/patr0nus/Vector/blob/master/Vector.h

我正在尝试创建一个指向自定义Class对象的unique_ptr向量.

它曾经失败过:

错误:无法分配类型为'std :: __ 1 :: unique_ptr std :: __ 1 :: default_delete>'的对象,因为其隐式删除了其复制赋值运算符

我通过向vector.h添加以下代码来修复它:

void push_back(T&& val)
    {
        resize(m_size + 1);
        m_container[m_size - 1] = std::move(val);
    }
Run Code Online (Sandbox Code Playgroud)

现在,问题是,我无法迭代这个向量和其他功能,如swap失败:

no matching function for call to 'swap'
        swap(*__x4, *__x5);
candidate template ignored: could not match 'tuple' against 'unique_ptr'
swap(tuple<_Tp...>& __t, tuple<_Tp...>& __u)
Run Code Online (Sandbox Code Playgroud)

我需要一些关于如何解决这些问题的指导.

Gui*_*cot 5

您不能使用patr0nus/Vector非POD类型.原因很简单:它memcpy在许多地方使用,并要求类型是复制构造.

将它与其他非POD的东西一起使用实际上是未定义的行为.不要将该向量用于非POD类型.没有办法绕过它.

您可能知道,您可以使用一个定义良好的实现,该实现遵循一组精确的需求,并且可能比该矢量实现更优化:std::vector.

如果您有一些内存或分配约束,则可以实现自定义分配器.