0

如果我执行以下操作:

string* create_array(){
    string* arr = new string[2];
    string s = "hello";
    string s2 = "world";

    arr[0] = s;
    arr[1] = s2;
    return arr;
}

arr[0] = s制作副本s然后将该副本放入arr[0]指向的内存地址的分配吗?还是它使 arr[0] 引用本地堆栈变量s,在这种情况下,如果我使用从该函数调用返回的数组arr[0]将产生不可预测的行为?

谢谢

4

1 回答 1

4

是 arr[0] = s 的赋值,复制了 s

是的。

然后将该副本放入 arr[0] 指向的内存地址中?

No.arr[0]是 a string,它不指向任何东西。(在内部,它可能有一个char*地方,但每个实例都是唯一的,std::string并且是一个实现细节,我添加了这个评论只是为了完整)

还是让 arr[0] 引用本地堆栈变量 s,在这种情况下,如果我使用从该函数返回的数组,调用 arr[0] 会有不可预测的行为?

不,它会复制。

于 2012-11-13T14:17:48.220 回答