C++ Primer 5th笔记(chap 13 拷贝控制) 实例1测试和结果分析

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

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/113914074