C ++:创建一个本地对象数组

时间:2012-11-13 14:16:23

标签: c++ arrays pointers

如果我执行以下操作:

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]将具有不可预测的行为?

由于

1 个答案:

答案 0 :(得分:4)

  

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

  

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

没有。 arr[0]string,它并不指向任何内容。 (在内部,它可能在某处char*,但每个std::string实例都是唯一的,并且是一个实现细节,我添加此注释只是为了完成)

  

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

不,它会复制。