C++ Primer 5th notes (chap 13 copy control) Example 1 test and result analysis

1. Test code and results

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;

/* The content of m1 becomes m5. After each assignment of m2, m4, and m6, only c1, c2, c4, c6 remain in f2
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 assigns itself to 0. f2 unchanged
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;

The remaining results are as follows:

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

[Reference]
[1] Code copyControl.h

Guess you like

Origin blog.csdn.net/thefist11cc/article/details/113914074