这是一个类,它基本上是一个数字数组,我想在其上执行一些操作。
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函数中未定义。就像数组数组在构造函数之外停止存在一样,这没有任何意义。有什么问题?
非常感谢。
答案 0 :(得分:5)
就好像数组数组在构造函数之外停止存在,这没有任何意义。
实际上,这是唯一有意义的行为......这就是语言的运作方式。
array
是在构造函数中声明和定义的局部变量。当构造函数退出时,指针变量被破坏,并且泄漏它所引用的内存。分配有new
或new []
的内存始终需要相应的delete
或delete []
才能使其引用范围超出范围。总是。
array
应该是班级的成员。你正在学习,所以最好弄清楚动态内存处理是如何工作的,但是在将来,更喜欢一个处理分配的安全容器(即std::unique_ptr
,std::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
};