c++ - C ++指针的指针是否自动访问新值?
问题描述
我很难理解指向指针的指针应该如何工作,如下例所示。
假设我在某个文件中的一个类中有以下内容
typedef object* objectPtr;
和另一个文件包含
struct RandomStruct
{
RandomStruct( objectPtr* obj = NULL ): ojbOwner( obj ) {}
objectPtr* objOwner;
}
我将它们都用作另一个类的成员并像这样构造它们
Constructor():
objectPtrMember( NULL )
, RandomStructMember( &objectPtr ){}
然后我继续objectPtrMember
在运行时通过编辑器更新我的变量以指向一个对象,并且我的逻辑告诉我它objOwner
也会被更新,因为它指向objectPtrMember
哪个是通过编辑器更新的,所以我的编辑器程序说否则objOwner
保持 NULL .
关于指针有什么我可能理解错误的地方吗?还是我只是没有做正确的事?
解决方案
不,当您复制指针时,副本的值与原始指针的值无关。例如
int *p = nullptr;
int *x = p; // copy p into x
p = &i; // point p somewhere
assert(x == nullptr); // but x is still nullptr
这就是您的情况。
要获得所需的语义,您objOwner
可以引用指针,如下所示:
objectPointer* & objOwner;
// ^ reference
现在,当您修改所objOwner
引用的指针时(假设指针已传递给 的构造函数RandomStruct
),objOwner
指针也将被修改。
推荐阅读
- python - 从存储在 Google Cloud Storage 中的文件创建 tar 存档
- python - 如何使用 yfinance 检测失败的下载
- c - 如何在 MacOS for Windows 上编译
- angular - Angular AsyncValidatorFn 导致 CPU 和内存使用率高
- apache - RedirectMatch 添加额外的 url 段
- php - 在本地加入 Zoom Web sdk 加入 Zoom 会议,然后遇到错误“加入会议超时”和“签名无效”
- javascript - 制作类似于material ui的vue slot结构
- r - AWS EMR 上的 sparklyr 未开始运行
- data-structures - 在 Swift 中过滤多个值
- postgresql - Postgres 数组包含来自另一个数组的任何内容?