#include #include #include #include "Person.h" #include "PersonException.h" #include #include "memory" using std::cin; using std::cout; using std::string; using std::exception; int main() { { // extra scope starts here to cause destructor of the vector being called at end-of-scope std::vector> people; string namePrompt = "Enter name: "; string name; string agePrompt = "Enter age: "; int age; string salaryPrompt = "Enter salary: "; int salary; cout << namePrompt; cin >> name; while (name != "q") { try { cout << agePrompt; cin >> age; if (!cin) { cin.clear(); string dummy; cin >> dummy; throw PersonException("invalid age"); } std::unique_ptr personPtr(Person::GetPerson(name, age)); cout << salaryPrompt; cin >> salary; if (!cin) { cin.clear(); string dummy; cin >> dummy; throw PersonException("invalid salary"); } personPtr->setSalary(salary); people.push_back(move(personPtr)); } catch (exception &e) { cout << "PersonException thrown: " << e.what() << '\n'; } cout << "There are " << Person::GetCount() << " Person(s), " << people.size() << " in vector\n"; cout << namePrompt; cin >> name; } // people.clear(); } // end-of-scope, the vector will be automatically cleared here in its destructor cout << "There are " << Person::GetCount() << " Person(s) left dangling\n"; return 0; }