AutoReset
|
|
题目描述
“只要我离开了你的世界,无论你做过什么,我都能忘记你回到从前!”小PY今天很小清新的,大家不要说他腹黑啊。他知道今天大家都学习了析构函数!现在请大家帮他实现一个类AutoReset,这个类的功能是在一个作用域开始的时候,保存某个变量的值,而当该作用域结束的时候能够实现变量值的Reset。比如以下这个例子:
我们在22与24行之间可以改变value的值,例如value = value *2; 当离开了作用域后(25行及之后),value将被复位。 实现下面这个类: class AutoReset { public: AutoReset(int *scoped_variable, int new_value); ~AutoReset();
private: int *scoped_variable_; int original_value; }; 注意:只需要提交类的实现
样例输入
1691022185449811488519565822441412766829029050
样例输出
0 169102 221854 44986 114888 519510 658212 2441414 1276616 829018 29050
提示
#include <iostream> class AutoReset
// your code will be here
int main(int argc, char *argv[])
{ int value; int count = 0;
while (cin >> value) {
{
AutoReset auto_reset(&value, count); value *= 2; count++; cout << value << " "; }
cout << value << endl;
} return 0; } 在这里我们实现的这个类体现了C++编程中一个常用的技巧,RAII:Wiki。嗯,好像很高端的样子。简单地讲:利用析构函数做资源的回收。RAII指的是这样一种技术:当类对象不在域(go out of scope)中时,就调用类的析构函数。析构函数然后会释放所有由该对象所申请的资源。RAII通常用于很紧缺的资源,或那些在被释放时必须要有可预测点(predictable point)的资源。我们这里这个类只是一个简单的例子而已。
|