如何启动地图的复制构造函数?
How to initiialise the copy constructor for a map?
我已经为此敲打了至少两个小时了,这里可能缺少我的知识空白。基本上,我必须为复制构造函数编写函数,无论如何我都无法让它工作。我在这里绝对忽略了一些东西,因为这似乎并不那么复杂。
// Definition default constructor
Members::Members()
{
members = new map<string, set<string>>;
numOfMembers = 0;
}
// Definition copy constructor
Members::Members(const Members& mem)
{
numOfMembers = mem.numOfMembers;
}
我似乎根本无法执行这个程序,它停在复制构造函数上,我只是不确定从这里开始。仍然在缠绕着STL地图。希望得到任何帮助或解释!谢谢!
给定标头函数:
class Members
{
// Overloaded insertion operator (friend)
friend std::ostream& operator<<(std::ostream& out, const Members& mem);
public:
// Default constructor
Members();
// Copy constructor
Members(const Members& mem);
如果你在任何一个构造函数中都不需要任何特殊的逻辑,不要定义它们,默认的逻辑将自动放置到位,它们就可以很好地完成工作。
如果必须定义它们:
// Definition default constructor (note: maps are initialized when you define them)
Members::Members():numOfMembers(0)
{
}
// Definition copy constructor
Members::Members(const Members& mem)
{
numOfMembers = mem.numOfMembers;
// if you want the map as well
members = mem.members;
}
由于它是一个结构,您可能需要使用new
创建members
(顺便说一句,这里似乎绝对没有理由使用它,请参阅 farbiondriven 的答案(。然后,您必须从其他类复制members
。这是细分:
// Definition copy constructor
Members::Members(const Members& mem)
{
members = new map<string, set<string>>; // Create memebers
*members = *mem.members; // Copy
numOfMembers = mem.numOfMembers;
}
这可以通过使用map
的复制构造一步完成,该构造在一个步骤中创建和复制(请参阅参考文献中的数字(3((:
// Definition copy constructor
Members::Members(const Members& mem)
{
members = new map<string, set<string>>(*mem.members); // Call map's copy constructor
numOfMembers = mem.numOfMembers;
}
不要忘记delete members;
类的析构函数。另外,请注意,这是一个糟糕的设计:你真的应该使用farbiondriven的答案,或者至少使用像std::unique_ptr
这样的自动指针。
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 当从函数参数中的临时值调用复制构造函数时
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 复制构造函数、赋值运算符C++
- std::ofstream 作为类成员删除复制构造函数?
- 复制构造函数C++无法正确复制指针
- 关于复制构造函数的一个棘手问题
- 为什么调用复制构造函数而不是移动构造函数?
- 填充上编译器生成的复制构造函数之间的不一致
- C++ 对象指针数组的复制构造函数
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 防止在复制构造函数中隐式调用基构造函数
- 为用户定义的类正确调用复制构造函数/赋值运算符
- 具有已删除移动和复制构造函数的类的就地构造
- 复制构造函数隐式转换问题
- 复制构造函数中的递归调用