gpt4 book ai didi

c++ - std::vector 的复制构造函数如何操作?

转载 作者:可可西里 更新时间:2023-11-01 15:47:42 26 4
gpt4 key购买 nike

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::stringDoStuff 之后叫什么?

坚果壳,我基本上是在问,什么时候 std::vector的复制构造函数被调用,里面的元素是怎么复制的?

最佳答案

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

关于c++ - std::vector 的复制构造函数如何操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10368602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com