在调用以下代码时,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
的复制构造函数时,里面的元素是如何复制的?
答案 0 :(得分:15)
std::vector
和大多数其他标准库容器按值存储元素。在插入时或复制容器时复制元素。 std::string
也会保留自己的数据副本,只要您对它的使用有所了解。