【发布时间】:2018-04-08 20:31:40
【问题描述】:
我的指针有一些问题,我不确定我是否搞砸了。
Class A{
...
}
Class B: public A{
...
X xInfo;
X getX();
}
Class X{
...
A *pointerToAType;
void setPointer(A *point);
}
所以我有一个 B 对象的实例化。
我有代码:
cout << "True Address: " << &bObj;
cout << "Address one: " << &bObj.getX().pointerToAType;
bObj.getX().setPointer(&bObj);
cout << "Address four: " << &bObj.getX().pointerToAType;
setPointer 代码为:
X::setPointer(A *pointer){
cout << "Address two: "<< pointerToAType;
pointerToAType = pointer;
cout << "Address three: "<< pointerToAType;
}
所以输出是: 真实地址:0xABCDEF 地址一:0 地址二:0 地址三:0xABCDEF 地址四:0
所以看起来好像我成功地更新了方法内的指针,但是一旦我离开方法,指针就被取消了。 我对为什么会发生这种情况以及如何强制指针保持指向感到困惑。
我认为我正确地传递了地址的位置,并正确地设置了它,所以它应该保留。但是我的指针有点弱。
最小示例?:
//main.cpp
main(){
B bObj;
cout << "True Address: " << &bObj;
cout << "Address one: " << &bObj.getX().pointerToAType;
bObj.getX().setPointer(&bObj);
cout << "Address four: " << &bObj.getX().pointerToAType;
}
//b.cpp
B::getX(){return xInfo;}
//x.cpp
X::setPointer(A *pointer){
cout << "Address two: "<< pointerToAType;
pointerToAType = pointer;
cout << "Address three: "<< pointerToAType;
}
【问题讨论】:
-
拥有零碎的代码是没有帮助的。请发帖minimal reproducible example。
-
&somethingThatIsAPointer是指针的地址,而不是指针的值。 -
getX返回副本而不是引用。 -
这里
&bObj.getX().pointerToAType你不应该取消引用bObj和bObj.getX().pointerToAType应该打印地址。 -
尝试添加一个最小的完整可验证示例。