C++中如何让多个对象的参数指向同一块内存区域?
问题解决:对象数组共享参数同步更新的指针实现错误修复
问题根源
你写的Set_elemento函数完全没有修改类的成员变量,只是在操作局部临时指针:
p1、p2、j都是函数内的临时变量,函数结束后就会销毁- 执行
p1 = &nodoi只是取成员变量的地址赋值给临时指针,随后p1 = nodo_i又用传入的指针覆盖了临时指针,全程没改变nodoi成员变量的值 - 类的成员变量根本没被赋值,所以修改原对象时自然不会同步
正确实现步骤
1. 确保类成员为指针类型
首先你的类(假设名为Elemento)需要把共享参数定义为指针成员,这样才能存储外部对象的内存地址:
class Elemento { private: // 用指针存储共享对象的地址 Nodo* nodoi; Nodo* nodoj; Seccion* seccion; public: void Set_elemento(Nodo *nodo_i, Nodo *nodo_j, Seccion *seccion_); // 按需添加其他成员函数、构造/析构函数(注意内存管理) };
2. 正确实现Set_elemento函数
直接将传入的指针赋值给类的成员变量,让多个Elemento对象共享同一个Nodo/Seccion的内存地址:
void Elemento::Set_elemento(Nodo *nodo_i, Nodo *nodo_j, Seccion *seccion_) { // 直接赋值指针,让成员变量指向传入的对象地址 nodoi = nodo_i; nodoj = nodo_j; seccion = seccion_; }
效果验证
当你通过elementos[i].Set_elemento(&nodos[...], ...)赋值后,所有指向同一个nodos[x]的Elemento对象,其nodoi/nodoj都会指向同一块内存。此时修改nodos[x]的参数,所有关联的Elemento对象访问该参数时都会得到更新后的值,完全不需要手动逐个修改。
内容的提问来源于stack exchange,提问作者Hector Fabio Chaparro Fontalvo
相关产品推荐
相关产品推荐

