如果我执行以下操作:

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/

10-11 22:41
查看更多