是否可以在不创建副本的情况下向全局关联数组添加新的本地结构?

问题描述

我正在尝试从函数内部向全局关联数组添加新结构。当我直接在数组中创建一个新结构,然后通过指针对其进行操作时,一切都很好:

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;
}