std :: vector copy构造函数如何运行?

时间:2012-04-29 00:01:43

标签: c++ string vector std

在调用以下代码时,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

一个坚果shell,我基本上问,当调用std::vector的复制构造函数时,里面的元素是如何复制的?

1 个答案:

答案 0 :(得分:15)

std::vector和大多数其他标准库容器按值存储元素。在插入时或复制容器时复制元素。 std::string也会保留自己的数据副本,只要您对它的使用有所了解。