怎样的std :: vector的拷贝构造函数操作?(How does std::vector

2019-07-29 05:03发布

如何做一个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的拷贝构造函数被调用,怎么在里面复制的元素?

Answer 1:

std::vector和由值大多数其他标准库容器存储元件。 元素要复制上插入或当容器被复制。 std::string也维护自己的数据副本,只要你对它的使用而言。



文章来源: How does std::vector's copy constructor operate?