问题描述
我正在尝试从函数内部向全局关联数组添加新结构。当我直接在数组中创建一个新结构,然后通过指针对其进行操作时,一切都很好:
myObject[string] globalArray;
myObject * addMyObject(string d) {
myObject * p;
globalArray[d] = *(new myObject);
p = &(globalArray[d]);
[do changes to myObject by p]
return p;
}
但是,如果我先创建一个本地对象,然后将其指针分配给全局数组的一个元素,它将无法正常工作。我可以看到为该数组创建了对象的副本。对本地对象的任何更改都将丢失,并且下次我从全局数组访问此元素时,它基本上是空白的(未更改的新结构)。
myObject * addMyObject(string d) {
myObject * p;
p = new myObject;
globalArray[d] = *p;
[do changes to myObject by p]
return p;
}
我仍然想采用第二种方法来首先创建本地对象。但是我应该在代码中进行哪些更改,以使创建的对象不再是局部的,而是真正的全局数组的元素?
谢谢!
解决方法
结构是按值复制的,没有办法解决。您可以切换到数组中的类或指针,这将解决您的问题。
如果您真的想将结构数据直接保留在关联数组中,则需要先将对象插入数组 中,然后使用其指针,然后可以对其进行修改。
>myObject* addMyObject(string d) {
globalArray[d] = myObject();
auto p = &globalArray[d];
[do changes to myObject by p]
return p;
}