【发布时间】:2020-06-25 12:11:10
【问题描述】:
假设我的结构如下所示 -
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);
所以我的问题是当阵列超出容量时,它必须移动到其他位置。谁将为成员结构分配内存?我是否必须编写自己的副本、赋值和移动操作或提供的编译器就足够了?默认提供的操作会做浅拷贝并产生问题吗?
【问题讨论】:
-
注意
char member1[10]不是指针,它是一个数组。数据直接存储在对象中,没有间接性,也没有浅拷贝做错事的危险。 -
你的构造函数有错别字,应该是“Member”而不是“Membe”
-
注意将数组作为指针传递是容易出错的,std::array 是你的朋友,或者在你的情况下甚至 std::string 或 std::string_view 取决于你是否真的需要复制数据