C ++入門書第5ノート(第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);

/ *再輸出
メッセージ:
contents1
は2つのフォルダに
表示されますフォルダには4つのメッセージが含まれています
メッセージ1:
コンテンツ1
メッセージ2:
コンテンツ2
メッセージ3:
コンテンツ
4メッセージ4:
コンテンツ6
* /

	m1.debug_print();
	f2.debug_print();

	// create some copies
	Message c1(m1);
	Message c2(m2), c4(m4), c6(m6);

/ * f2增加了c1、c2、c4、c6、より出是
メッセージ:
contents1
2つのフォルダに表示
フォルダには8つのメッセージが含まれています
メッセージ1:
コンテンツ1
メッセージ2:
コンテンツ2
メッセージ3:
コンテンツ
4メッセージ4:
コンテンツ6
メッセージ5:
コンテンツ1
メッセージ6:
コンテンツ2
メッセージ7:
contents4
メッセージ8:
contents6
* /
m1.debug_print();
f2.debug_print();

	// now some assignments
	m2 = m3;
	m4 = m5;
	m6 = m3;
	m1 = m5;

/ * M1の含有量はM2、M4及びM6、唯一C1、C2、C4の各割り当て後M5となり、F2に残っC6。
メッセージ:
contents5は
1で表示されるフォルダ
のフォルダは、4つのメッセージが含ま
:メッセージ1
contents1
メッセージ2:
contents2
メッセージ3:
contents4
メッセージ4:
contents6
* /
m1.debug_print();
f2.debug_print();

	// finally, self-assignment
	m2 = m2;
	m1 = m1;

/ * m1は自分自身を0に割り当てます。f2変更なし
メッセージ:
contents5
0フォルダーに表示
フォルダーには4つのメッセージが含まれます
メッセージ1:
contents1
メッセージ2:
contents2
メッセージ3:
contents4
メッセージ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