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::string
s in的指针globalVector
,可能会调用析构函数并std::string
删除所使用的内存,那么globalVector[0]
填充垃圾std::string
后会DoStuff
是叫什么名字?
一个坚果壳,我基本上问,当std::vector
调用复制构造函数时,里面的元素是如何被复制的?
Dar*_*con 18
std::vector
大多数其他标准库容器按值存储元素.在插入时或复制容器时复制元素.std::string
就您的使用情况而言,它还维护自己的数据副本.