如果我执行以下操作:
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]
会有不可预测的行为?谢谢
最佳答案
是arr [0] = s的赋值,是s的副本
是。
然后将该副本放入arr [0]指向的内存地址中?
不。arr[0]
是string
,它不指向任何东西。 (在内部,它可能在某个地方有char*
,但这在std::string
的每个实例中是唯一的,并且是实现的详细信息,我添加此注释只是为了完整)
还是使arr [0]引用本地堆栈变量s,在这种情况下,如果我使用从此函数返回的数组调用arr [0]将具有不可预测的行为?
不,它会复制。
关于c++ - C++:创建本地对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13362300/