如何做一個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