c++ - 为什么改变指针的引用不会改变它的原始值?

标签 c++ pointers

我觉得我错过了一些关于引用和指针的关键概念;我有这样的代码

#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 分配一个新值,您将覆盖它,而 fObjectbarPtr 不会改变。

关于c++ - 为什么改变指针的引用不会改变它的原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56742842/

相关文章:

c++ - 在 C++11 中使用 "auto"推导出的 lambda 类型是什么?

c++ - 无法正确构建 Boost

arrays - Delphi如何解析带有指针(无类型)参数的重载函数?

Java 引用值是地址值?

C:指针算术的评估:操作何时完成?

c++ - 从 C++ 到 MySQL 到 C++ 获取和设置 wchar_t 字符

c++ - 设置条件时 lldb 失败

c++ - 如何安全地保留 C++ const 引用?

c++ - 返回 NOT NULL 指针的正确方法是什么

c++ - 空指针 : how to use as a general class pointer?