我很难理解指针到指针应该如何工作,就像下面的例子一样。
假设我在某个文件的类中有以下内容
typedef object* objectPtr;
和另一个文件,该文件包含
struct RandomStruct
{
RandomStruct( objectPtr* obj = NULL ): ojbOwner( obj ) {}
objectPtr* objOwner;
}
我使用这两个类作为另一个类的成员,并像这样构造它们
Constructor():
objectPtrMember( NULL )
, RandomStructMember( &objectPtr ){}
然后在运行时通过编辑器更新ObjectPTRMember
变量,使其指向一个对象,其中我的逻辑告诉我ObjOwner
也将被更新,因为它指向通过编辑器更新的ObjectPTRMember
,所以我的编辑器程序会说另外的话,因为ObjOwner
保持为空。
关于指针,有什么我可能理解错误的地方吗? 还是我做得不对?
否,当您制作指针的副本时,副本的值独立于原始指针的值。 例如。
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
指针。
typedef object* objectPtr;
避免像这样混淆指针类型。
NULL
在新的C++程序中不应使用null
。 它是为了向后兼容而存在的。 请改用nullptr
。
我的逻辑告诉我objOwner也会被更新
关于指针,有什么我可能理解错误的地方吗?
是的,你的理解有问题。 修改一个指针不会导致修改另一个指针。