簡體   English   中英

分配結構,包括指針

[英]Assigning structs including pointers

考慮下面的簡單程序。 它只是從MyStruct定義了兩個變量AB ,然后初始化A

我如何復制AB與新指針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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM