首页 > 解决方案 > C ++指针的指针是否自动访问新值?

问题描述

我很难理解指向指针的指针应该如何工作,如下例所示。

假设我在某个文件中的一个类中有以下内容

typedef object*    objectPtr;

和另一个文件包含

struct RandomStruct
{
    RandomStruct( objectPtr* obj = NULL ): ojbOwner( obj ) {}
    objectPtr*     objOwner;
}

我将它们都用作另一个类的成员并像这样构造它们

Constructor():
objectPtrMember( NULL )
, RandomStructMember( &objectPtr ){}

然后我继续objectPtrMember在运行时通过编辑器更新我的变量以指向一个对象,并且我的逻辑告诉我它objOwner也会被更新,因为它指向objectPtrMember哪个是通过编辑器更新的,所以我的编辑器程序说否则objOwner保持 NULL .

关于指针有什么我可能理解错误的地方吗?还是我只是没有做正确的事?

标签: c++pointers

解决方案


不,当您复制指针时,副本的值与原始指针的值无关。例如

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指针也将被修改。


推荐阅读