#include <iostream>
#include <memory>
#include <ostream>
class Student {
private:
int _id;
int _age;
public:
// Rule of Zero
Student(int id, int age) : _id(id), _age(age) {}
// getter
[[nodiscard]] int getId() const {
return _id;
}
[[nodiscard]] int getAge() const {
return _age;
}
// 打印函数,用于输出学生的信息还有 shared_ptr 的引用计数
static void print(std::shared_ptr<Student>& student) {
std::cout << student->getId() << " " << student->getAge() << " "
<< student.use_count() << std::endl;
}
};
int main() {
int T, N;
std::cin >> T;
while (T--) {
std::cin >> N;
std::shared_ptr<Student> sp;
for (int i = 0; i < N; ++i) {
std::string command;
std::cin >> command;
// 处理各种操作
if (command == "new") {
int id, age;
std::cin >> id >> age;
sp = std::make_shared<Student>(id, age); // 创建新的 Student 对象
} else if (command == "copy") {
auto new_sp = sp; // 复制 shared_ptr
sp = new_sp;
} else if (command == "print") {
Student::print(sp);
} else {
std::cout << "usage1: new id age" << std::endl
<< "usage2: copy" << std::endl
<< "usage3: print" << std::endl
<< "Please try again..." << std::endl;
return -1;
}
}
}
return 0;
}
// 64 位输出请用 printf("%lld")