1. 测试代码和结果
string s1("contents1");
string s2("contents2");
string s3("contents3");
string s4("contents4");
string s5("contents5");
string s6("contents6");
// all new messages, no copies yet
Message m1(s1);
Message m2(s2);
Message m3(s3);
Message m4(s4);
Message m5(s5);
Message m6(s6);
Folder f1;
Folder f2;
m1.save(f1);
m3.save(f1);
m5.save(f1);
m1.save(f2);
m2.save(f2);
m4.save(f2);
m6.save(f2);
/* 输出为
Message:
contents1
Appears in 2 Folders
Folder contains 4 messages
Message 1:
contents1
Message 2:
contents2
Message 3:
contents4
Message 4:
contents6
*/
m1.debug_print();
f2.debug_print();
// create some copies
Message c1(m1);
Message c2(m2), c4(m4), c6(m6);
/* f2增加了c1, c2, c4, c6, 输出为
Message:
contents1
Appears in 2 Folders
Folder contains 8 messages
Message 1:
contents1
Message 2:
contents2
Message 3:
contents4
Message 4:
contents6
Message 5:
contents1
Message 6:
contents2
Message 7:
contents4
Message 8:
contents6
*/
m1.debug_print();
f2.debug_print();
// now some assignments
m2 = m3;
m4 = m5;
m6 = m3;
m1 = m5;
/* m1 的内容变为了m5的,m2,m4,m6每次赋值后,f2 只剩下c1,c2,c4,c6
Message:
contents5
Appears in 1 Folders
Folder contains 4 messages
Message 1:
contents1
Message 2:
contents2
Message 3:
contents4
Message 4:
contents6
*/
m1.debug_print();
f2.debug_print();
// finally, self-assignment
m2 = m2;
m1 = m1;
/* m1自身赋值,变为0了。f2不变
Message:
contents5
Appears in 0 Folders
Folder contains 4 messages
Message 1:
contents1
Message 2:
contents2
Message 3:
contents4
Message 4:
contents6
*/
m1.debug_print();
f2.debug_print();
vector<Message> vm;
cout << "capacity: " << vm.capacity() << endl;
vm.push_back(m1);
cout << "capacity: " << vm.capacity() << endl;
vm.push_back(m2);
cout << "capacity: " << vm.capacity() << endl;
vm.push_back(m3);
cout << "capacity: " << vm.capacity() << endl;
vm.push_back(m4);
cout << "capacity: " << vm.capacity() << endl;
vm.push_back(m5);
cout << "capacity: " << vm.capacity() << endl;
vm.push_back(m6);
vector<Folder> vf;
cout << "capacity: " << vf.capacity() << endl;
vf.push_back(f1);
cout << "capacity: " << vf.capacity() << endl;
vf.push_back(f2);
cout << "capacity: " << vf.capacity() << endl;
vf.push_back(Folder(f1));
cout << "capacity: " << vf.capacity() << endl;
vf.push_back(Folder(f2));
cout << "capacity: " << vf.capacity() << endl;
vf.push_back(Folder());
cout << "capacity: " << vf.capacity() << endl;
Folder f3;
f3.save(m6);
vf.push_back(f3);
cout << "capacity: " << vf.capacity() << endl;
cout << endl;
其余结果如下:
capacity: 0
capacity: 1
capacity: 2
capacity: 3
capacity: 4
capacity: 6
capacity: 0
capacity: 1
capacity: 2
capacity: 3
capacity: 4
capacity: 6 //这里虽然结果是6,但是size是6
capacity: 6
【参考】
[1] 代码copyControl.h