簡體   English   中英

構造函數和成員函數中的指針返回不同的地址

[英]Pointer in constructor and member function return different addresses

你好,我編譯程序時遇到問題。 為什么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();
}

在構造函數中,您聲明一個隱藏成員的局部變量。 兩個成員都未初始化,因此調用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);
}

由於您正在處理指向已分配內存的原始指針,因此請記住遵循“三規則”為類提供有效的復制語義。 然后,一旦您對指針雜耍技巧感到滿意,就將其扔掉並改用std::vector

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM