[英]Assigning structs including pointers
考虑下面的简单程序。 它只是从MyStruct
定义了两个变量A
和B
,然后初始化A
我如何复制A
到B
与新指针B
?
如果我使用赋值运算符, firstMember
B
firstMember
将被分配给A
firstMember
,并且每当我更改B.firstMember[i]
的值时, A.firstMember[i]
的值就会改变。 我已经知道可以使用函数来完成,但是有没有更简单的方法? 假设MyStruct
可以有很多指针,编写一个函数似乎并不好。
typedef struct MyStruct
{
int * firstMember;
int secondMember;
} MyStruct;
int main()
{
MyStruct A;
MyStruct B;
Initialize(A); // initializes A such that A.firstMember[0] != 5
B = A;
B.firstMember[0] = 5;
cout<<A.firstMember[0]; // prints 5
return 0;
}
这属于“ 3的规则” 。 一旦开始在一个类中管理原始指针,您可能想要出于这个原因定义一个自定义的构造函数,析构函数和赋值运算符。
首先,我不明白为什么在两个成员中,一个是指针,而另一个不是。 我假设第一个指针成员指向一个整数。 这是该结构的改进代码段:
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 ++适当的构造函数(如构造函数),并且还需要具有复制构造函数和赋值运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.