假设您有一个带有指向数组的私有指针的类。如何使用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
。
答案 0 :(得分:7)
MyClass spam(); // Construct object
它不构造一个对象,它声明一个名为spam
的函数,该函数不带参数并返回MyClass
。此默认值构造一个对象:
MyClass spam; // Construct object
有关详细信息,请访问Google 最令人烦恼的解析。
更新:正如@Mark Ransom指出的那样,您的代码还有另一个问题。在构造函数中创建一个数组,然后将x
设置为指向此类数组。但是,一旦构造函数完成执行,数组生命周期就会结束,因此对x
的进一步访问会崩溃(如果你足够幸运的话)。
答案 1 :(得分:3)
只是一个猜测,程序崩溃或显示错误的输出。这是因为构造函数正在设置一个指向本地数组的指针,该数组会留下范围并在构造函数的末尾被销毁。
答案 2 :(得分:0)
那应该是* bar而不是bar [0]。