¿Cómo funciona un std::vector<std::string>
inicializar su auto cuando el siguiente código se invoca¿Cómo funciona el constructor de copias de std :: vector?
std::vector<std::string> original;
std::vector<std::string> newVector = original;
Parecería como si el constructor de copia se invoca en std::vector<std::string> new
durante newVector = original
, pero ¿cómo son los std::string
's traídos dentro de la orginal
? ¿Son copias o nuevos std::string
? Así es la memoria en newVector[0]
lo mismo que original[0]
.
La razón que pido es decir hago lo siguiente
#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
caerá fuera del alcance de DoStuff
(en una versión no optimizada), pero si t
se acaba de llenar con punteros a la std::string
' s en globalVector
, se puede llamar al destructor y se borra la memoria utilizada en std::string
, allí para hacer globalVector[0]
lleno de basura std::string
después de llamar a DoStuff
?
Una cáscara de nuez, básicamente estoy preguntando, cuando se llama al constructor de copia std::vector
, ¿cómo se copian los elementos dentro?
Bastante seguro de que esto fue solo un ejemplo, pero en su primer bloque de código, 'std :: vector new = original;', ese 'new' no es un nombre de variable legal. Estoy seguro de que sabes que es una palabra clave reservada. –
@ChrisA .: Tiene razón, era solo el código de prueba – chadb