在类中动态分配数组

时间:2013-02-10 21:39:50

标签: c++ arrays class dynamic

这是一个类,它基本上是一个数字数组,我想在其上执行一些操作。

class MyClass {
public:
    MyClass() { //constructor
        int * array = new int[n];
        for(int i = 0; i < n; i++) {
            array[i] = i*i;
        }
    } //end constructor
    int displayIthElement(int i) {
        return array[i];
    }
}

我得到:错误,标识符“array”在displayIthElement函数中未定义。就像数组数组在构造函数之外停止存在一样,这没有任何意义。有什么问题?

非常感谢。

1 个答案:

答案 0 :(得分:5)

  

就好像数组数组在构造函数之外停止存在,这没有任何意义。

实际上,这是唯一有意义的行为......这就是语言的运作方式。

array是在构造函数中声明和定义的局部变量。当构造函数退出时,指针变量被破坏,并且泄漏它所引用的内存。分配有newnew [] 的内存始终需要相应的deletedelete []才能使其引用范围超出范围。总是。

array应该是班级的成员。你正在学习,所以最好弄清楚动态内存处理是如何工作的,但是在将来,更喜欢一个处理分配的安全容器(即std::unique_ptrstd::vector等)。为你解除分配。

class foo {
public:
  foo() { 
    array = new int[length];
    for(int i = 0; i < length; i++) {
      array[i] = i*i;
    }       
  }
private:
  int *array;  // when does this get deallocated?  Look up RAII
};