Как 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
, как копируются элементы внутри?