如何做一个std::vector<std::string>
初始化自身时,下面的代码调用std :: vector的拷贝构造函数是如何操作的?
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
“ s在globalVector
,可能会调用析构函数并将std::string
中使用的内存删除,这里用于填充globalVector[0]
的垃圾std::string
的DoStuff
被调用后?
坚果壳,我基本上是问,当std::vector
的拷贝构造函数被调用时,里面的元素是如何被复制的?
很确定这只是一个例子,但在你的第一个代码块中,'std :: vector new = original;','new'不是合法的变量名。我相信你知道这是一个保留关键字。 –
2012-04-29 00:12:21
@ChrisA .:你说得对,它只是测试代码 – chadb 2012-04-29 00:41:23