考虑以下简单程序。它只是从A
定义了两个变量B
和MyStruct
,然后初始化A
。
如何使用A
的新指针将B
复制到B
?
如果我使用赋值运算符,firstMember
的{{1}}将被B
分配firstMember
,每当我更改A
的值时,值B.firstMember[i]
的变化。我已经知道它可以通过一个函数完成,但有没有更简单的方法?假设A.firstMember[i]
可以有很多指针,写一个函数似乎并不好。
MyStruct
答案 0 :(得分:1)
这属于"Rule of 3"。一旦开始管理类中的原始指针,您可能希望定义一个自定义的构造函数,析构函数和赋值运算符。
答案 1 :(得分:0)
首先,我不明白为什么在两个成员中,一个是指针,另一个不是。我假设作为指针的第一个成员指向一个整数。这是结构的改进代码片段:
struct MyStruct
{
int * firstMember;
int secondMember;
MyStruct& operator = (const MyStruct& src) {
*firstMember = *src.firstMember;
return *this;
}
MyStruct(int a = 0) {
firstMember = new int(a);
secondMember = a;
}
MyStruct(const MyStruct& src) {
// deep copy
firstMember = new int(*src.firstMember);
secondMember = src.secondMember;
}
~MyStruct() {
if (firstMember)
delete firstMember;
}
};
注意,struct是一个默认情况下将所有成员声明为public的类。而不是使用C语言初始化,更好地使用C ++正确构造,如构造函数,并且您还需要复制构造函数和赋值运算符。