我编译程序时遇到问题。 为什么指针intArray在同一对象的构造函数和成员函数display()中给出不同的地址?谢谢!
#include<iostream>
using namespace std;
class MyClass
{ private:
int* intArray;
int arraySize;
public:
MyClass(int*,int);
~MyClass()
{delete []intArray;};
void display();
};
MyClass::MyClass(int intData[],int arrSize)
{ int *intArray = new int[arrSize];
cout<<intArray<<" "<<endl;
};
void MyClass::display()
{ cout<<intArray<<" "<<endl;
}
int main()
{ int Data[10]={9,8,7,6,5,4,3,2,1,0};
MyClass obj1(Data,10);
obj1.display();
}
答案 0 :(得分:7)
在构造函数中,声明一个隐藏该成员的局部变量。两个成员都未被初始化,因此调用display
将显示未初始化的值。
你可能想要一些
的内容MyClass::MyClass(int intData[],int arrSize) :
intArray(new int[arrSize]),
arraySize(arrSize)
{
// assuming the input array specifies initial values
std::copy(intData, intData+arrSize, intArray);
}
由于您正在处理分配内存的原始指针,请记住遵循Rule of Three以赋予类有效的复制语义。然后,一旦你对你的指针杂耍技巧感到满意,就把它丢弃并改用std::vector
。