C++ Primer 5th筆記(chap 13 拷貝控制) 例項2記憶體管理測試結果
阿新 • • 發佈:2021-03-06
1. 測試程式碼
string temp[] = { "one", "two", "three" };
StrVec sv(begin(temp), end(temp));
// run the string empty funciton on the first element in sv
if (!sv[0].empty())
sv[0] = "None"; // assign a new value to the first string
// we'll call getVec a couple of times
// and will read the same file each time
ifstream in("D:/code/cprimerGit/cplusprimer/cprimer/data/strvec-storyDataFile");
//ifstream in("../data/strvec-storyDataFile");
StrVec svec = getVec(in);
print(svec);
in.close();
cout << "copy " << svec.size() << endl;
auto svec2 = svec;
print(svec2);
cout << "assign" << endl;
StrVec svec3;
svec3 = svec2;
print(svec3);
StrVec v1, v2;
v1 = v2; // v2 is an lvalue; copy assignment
in.open("D:/code/cprimerGit/cplusprimer/cprimer/data/strvec-storyDataFile" );
v2 = getVec(in); // getVec(in) is an rvalue; move assignment
in.close();
StrVec vec; // empty StrVec
string s = "some string or another";
vec.push_back(s); // calls push_back(const string&)
vec.push_back("done"); // calls push_back(string&&)
// emplace member covered in chpater 16
s = "the end";
#ifdef VARIADICS
vec.emplace_back(10, 'c'); // adds cccccccccc as a new last element
vec.emplace_back(s); // uses the string copy constructor
#else
vec.push_back(string(10, 'c')); // calls push_back(string&&)
vec.push_back(s); // calls push_back(const string&)
#endif
string s1 = "the beginning", s2 = s;
#ifdef VARIADICS
vec.emplace_back(s1 + s2); // uses the move constructor
#else
vec.push_back(string(s1 + s2)); // calls push_back(string&&)
#endif
2. strvec-storyDataFile檔案內容:
Alice Emma has long flowing red hair.
Her Daddy says when the wind blows
through her hair, it looks almost alive,
like a fiery bird in flight.
A beautiful fiery bird, he tells her,
magical but untamed.
"Daddy, shush, there is no such thing,"
she tells him, at the same time wanting
him to tell her more.
Shyly, she asks, "I mean, Daddy, is there?"
3. 輸出結果:
【參考】
[1] 程式碼copyControl.h