2

我有一个带有动态数组(DA)的类

class DA{
  private:
    double* array;
    int size N;
    //other stuff
  public:
    DA(){
       array=NULL;
    }
    DA(int PN){
      N=PN;
      array=new double[N];
    };
    //destructor and other stuff
}

这似乎没问题。现在我想要一个具有一个 DA 对象的“应用程序”类:

class App{
  private:
    DA myDA;
  public:
    App(int N){
      //create myDA with array of size N
      DA temp(N);
      myDA=temp;
    };
}

问题是,我不知道如何在 App 构造函数中创建 myDA。我这样做的方式是为 temp 分配内存,然后 myDA 指向 temp。但我猜为 temp 分配的内存在构造函数完成后被删除。因此,当我执行我的程序时出现内存错误。那么如何正确分配内存呢?

4

1 回答 1

7

使用构造函数初始化列表:

App(int N) : myDA(N) {}

请注意,DA除非您遵循三规则,或者通过使用std::vector<double>、 anstd::unique_ptr<double[]>boost 作用域数组来简化问题,否则您的课程将被破坏:

#include <vector>

class DA{
  private:
    std::vector<double> data; // "array" is a std lib container name
  public:
    DA(int PN) : data(PN) {}
    // no need to write destructor, copy constructor or assignment operator.
};
于 2013-10-01T13:56:35.433 回答