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

Is it possible to add a new local struct to a global associative array without creating a copy?

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

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