返回指向数组的指针

时间:2011-09-29 20:20:09

标签: c++ pointers getter

假设您有一个带有指向数组的私有指针的类。如何使用getter访问(或有效复制数据),以便您可以使用其他变量访问它。

class MyClass
{
   private:
      double *x;
   public:
      myClass();
      virtual ~MyClass();
      double* getX() const;
      void setX(double* input);
};

MyClass::MyClass()
{
   double foo[2];
   double * xInput;
   foo[0] = 1;
   foo[1] = 2;

   xInput = foo;
   setX(xInput);
}

void MyClass::setX(double * input)
{
   x = input;
}

double * MyClass::getX() const;
{
   return x;
}

int main()
{
   MyClass spam(); // Construct object
   double * bar = spam.getX(); // This doesn't work
}

在这种情况下,bar [0]和bar [1]等于jibberish:-9.2559631349317831e+061

3 个答案:

答案 0 :(得分:7)

MyClass spam(); // Construct object

它不构造一个对象,它声明一个名为spam的函数,该函数不带参数并返回MyClass。此默认值构造一个对象:

MyClass spam; // Construct object

有关详细信息,请访问Google 最令人烦恼的解析

更新:正如@Mark Ransom指出的那样,您的代码还有另一个问题。在构造函数中创建一个数组,然后将x设置为指向此类数组。但是,一旦构造函数完成执行,数组生命周期就会结束,因此对x的进一步访问会崩溃(如果你足够幸运的话)。

答案 1 :(得分:3)

只是一个猜测,程序崩溃或显示错误的输出。这是因为构造函数正在设置一个指向本地数组的指针,该数组会留下范围并在构造函数的末尾被销毁。

答案 2 :(得分:0)

那应该是* bar而不是bar [0]。