分配包括指针的结构

时间:2014-05-30 02:20:10

标签: c++ pointers struct

考虑以下简单程序。它只是从A定义了两个变量BMyStruct,然后初始化A

如何使用A的新指针将B复制到B

如果我使用赋值运算符,firstMember的{​​{1}}将被B分配firstMember,每当我更改A的值时,值B.firstMember[i]的变化。我已经知道它可以通过一个函数完成,但有没有更简单的方法?假设A.firstMember[i]可以有很多指针,写一个函数似乎并不好。

MyStruct

2 个答案:

答案 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 ++正确构造,如构造函数,并且您还需要复制构造函数和赋值运算符。