16

std::vector<std::string>次のコードが呼び出されたときに、どのように自己を初期化しますか

std::vector<std::string> original;
std::vector<std::string> newVector = original;

std::vector<std::string> newコピー コンストラクターがduringで呼び出されるように見えますnewVector = originalが、 はどのようにstd::string内に持ち込まれorginalますか? それらはコピーですか、それとも新品std::stringですか? メモリnewVector[0]も と同じoriginal[0]です。

私が尋ねる理由は、私が次のことをしていると言うことです

#include <vector>
#include <string>
using namespace std;

vector<string> globalVector;

void Initialize() {
    globalVector.push_back("One");
    globalVector.push_back("Two");
}

void DoStuff() {
    vector<string> t = globalVector;
}

int main(void) {
    Initialize();
    DoStuff();
}

tDoStuff(最適化されていないビルドでは)の範囲外になりますが、の intへのポインターで満たされているだけの場合、デストラクタが呼び出され、使用されているメモリが削除される可能性があります。呼ばれた?std::stringglobalVectorstd::stringglobalVector[0]std::stringDoStuff

ナットシェル、私は基本的に尋ねています、std::vectorのコピーコンストラクターが呼び出されると、内部の要素はどのようにコピーされますか?

4

1 に答える 1

25

std::vectorおよび他のほとんどの標準ライブラリ コンテナーは、値によって要素を格納します。エレメントは、挿入時またはコンテナーのコピー時にコピーされます。std::stringまた、データの使用に関する限り、データの独自のコピーを保持します。

于 2012-04-29T00:08:56.720 に答える