16

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::stringin 的指针填充globalVector,可能会调用析构函数并std::string删除使用的内存,用于globalVector[0]填充垃圾std::string的 afterDoStuff是叫?

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

4

1 回答 1

25

std::vector和大多数其他标准库容器按值存储元素。在插入或复制容器时复制元素。std::string就您对数据的使用而言,它还维护自己的数据副本。

于 2012-04-29T00:08:56.720 回答