首页 > 解决方案 > 具有字符数组元素的结构的 STL 容器

问题描述

可以说我的结构如下所示 -

struct Member
{
    Membe(char* member1In, char* member2In)
    {
       strcpy(member1, member1In);
       strcpy(member2, member2In);
    }
    char member1[10];
    char member2[10];
};

和 std::vector 声明为

std::vector<Member> members{};

我使用emplace_back()如下方式插入值

members.emplace_back(value1, value2);

所以我的问题是当阵列超出容量时,它必须移动到其他位置。谁将为成员结构分配内存?我是否必须编写自己的副本、赋值和移动操作或提供的编译器就足够了?默认提供的操作会做浅拷贝并产生问题吗?

标签: c++c++11vectorstl

解决方案


谁将为成员结构分配内存?

std::vector将使用您提供的分配器分配内存(隐式地,使用默认参数)。

我是否必须编写自己的副本、赋值和移动操作或提供的编译器就足够了?

编译器提供的就足够了。

默认提供的操作会做浅拷贝吗

是的,尽管这取决于浅拷贝的含义。浅拷贝和深拷贝的区别只对引用类型有意义。

并制造问题?

不。你的类不包含指针/引用/迭代器,所以没有什么可以被深度复制,也没有问题。


推荐阅读