2

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

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];
    }
}

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

非常感谢。

4

1 回答 1

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
};
于 2013-02-10T21:42:13.573 回答