2015-04-07 65 views
0

HelloI在编译我的程序时遇到了问题。 为什么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(); 
} 
+6

因为它们是2个不同的变量?您在MyClass的构造中声明了一个新的intArray – danielfranca

+0

这里您声明了一个新的变量 int * intArray = new int [arrSize]; 使用与您的成员变量相同的名称 您应该写 intArray = new int [arrSize]; – nobs

+0

问题已解决。感谢您的帮助。 – Roaid

回答

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来代替。

+0

问题已解决。感谢您的帮助。 – Roaid