我觉得我错过了一些关于引用和指针的关键概念;我有这样的代码
#include "stdio.h"
struct bar {};
class foo {
public:
foo(){
barPtr = new bar();
};
bar* barPtr;
bar*& getBarPtr() {
return barPtr;
};
};
int main() {
foo fObject;
bar* b = nullptr;
b = fObject.getBarPtr();
printf("B before updates %p\n", b);
printf("barPtr before b updates %p\n", fObject.barPtr);
b = new bar();
printf("B after updates %p\n", b);
printf("barPtr after b updates %p\n", fObject.barPtr);
return 0;
}
输出是
b before updates 0x55db559ace70
barPtr before b updates 0x55db559ace70
b after updates 0x55db559ad2a0
barPtr after b updates 0x55db559ace70
我想要实现的是通过使用 b
改变 barPtr
指向的内容,所以我让 getBarPtr
函数返回 的引用>barPtr
。我不明白的是为什么更改 b
不会更改 barPtr
。
最佳答案
将 b
的定义更改为:
bar*& b = fObject.getBarPtr();
你目前正在做的是将fObject
的指针复制到b
中:它们是两个独立的对象。它们具有相同的值(指向您在 foo
的构造函数中创建的 bar
对象的地址),但它们彼此无关。因此,如果您为 b
分配一个新值,您将覆盖它,而 fObject
的 barPtr
不会改变。
关于c++ - 为什么改变指针的引用不会改变它的原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56742842/