cha*_*adb 10 c++ string vector std
std::vector<std::string>在调用以下代码时如何初始化自身
std::vector<std::string> original;
std::vector<std::string> newVector = original;
Run Code Online (Sandbox Code Playgroud)
这似乎好像拷贝构造函数会被调用的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();
}
Run Code Online (Sandbox Code Playgroud)
t将超出DoStuff(在非优化版本中)的范围,但是如果它t只是填充了指向std::strings in的指针globalVector,可能会调用析构函数并std::string删除所使用的内存,那么globalVector[0]填充垃圾std::string后会DoStuff是叫什么名字?
一个坚果壳,我基本上问,当std::vector调用复制构造函数时,里面的元素是如何被复制的?
Dar*_*con 18
std::vector大多数其他标准库容器按值存储元素.在插入时或复制容器时复制元素.std::string就您的使用情况而言,它还维护自己的数据副本.