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)
我需要一些关于如何解决这些问题的指导.
您不能使用patr0nus/Vector非POD类型.原因很简单:它memcpy在许多地方使用,并要求类型是复制构造.
将它与其他非POD的东西一起使用实际上是未定义的行为.不要将该向量用于非POD类型.没有办法绕过它.
您可能知道,您可以使用一个定义良好的实现,该实现遵循一组精确的需求,并且可能比该矢量实现更优化:std::vector.
如果您有一些内存或分配约束,则可以实现自定义分配器.