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]が指すメモリアドレスに入れますか?

いいえarr[0]、はstring何も指していません。(内部的には、おそらくchar*どこかにありますが、それはインスタンスごとに一意でstd::stringあり、実装の詳細です。完全を期すためにこのコメントを追加しました)

または、arr [0]がローカルスタック変数sを参照するようにしているのでしょうか。この場合、この関数から返された配列を使用すると、arr [0]を呼び出すと、予期しない動作が発生しますか?

いいえ、コピーを作成します。

于 2012-11-13T14:17:48.220 に答える