Как работает конструктор копирования std ::vector& #39;s?

Как std::vector<std::string>инициализирует себя при вызове следующего кода

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

Казалось бы, конструктор копирования будет вызываться для std::vector<std::string> newво время 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();
}

tбудет выходить за рамкиDoStuff(на неоптимизированной сборке ), но если tпросто заполнен указателями на std::stringв globalVector, может ли быть вызван деструктор и память, используемая в std::string, удалена, там для заполнения globalVector[0]мусором std::stringпосле вызова DoStuff?

Суть в том, что я спрашиваю, когда вызывается конструктор копирования std::vector, как копируются элементы внутри?

10
задан Keith Pinson 23 January 2013 в 17:34
поделиться