如果我执行以下操作:
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]
将具有不可预测的行为?
由于
答案 0 :(得分:4)
是arr [0] = s的赋值,它复制了s
是
然后将该副本放在arr [0]指向的内存地址中?
没有。 arr[0]
是string
,它并不指向任何内容。 (在内部,它可能在某处char*
,但每个std::string
实例都是唯一的,并且是一个实现细节,我添加此注释只是为了完成)
还是让arr [0]引用本地堆栈变量s,在这种情况下,如果我使用从这个函数返回的数组,调用arr [0]会有不可预测的行为吗?
不,它会复制。