[英]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.