繁体   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