SOJ.AutoReset

AutoReset

题目描述

只要我离开了你的世界,无论你做过什么,我都能忘记你回到从前!PY今天很小清新的,大家不要说他腹黑啊。他知道今天大家都学习了析构函数!现在请大家帮他实现一个类AutoReset,这个类的功能是在一个作用域开始的时候,保存某个变量的值,而当该作用域结束的时候能够实现变量值的Reset。比如以下这个例子:

 

我们在2224行之间可以改变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>
using namespace std;
 

class AutoReset
{
 public:
         AutoReset(int *scoped_variable, int new_value);
        ~AutoReset();
private:
        int *scoped_variable_;
        int original_value;
};

 

 // 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++编程中一个常用的技巧,RAIIWiki。嗯,好像很高端的样子。简单地讲:利用析构函数做资源的回收。RAII指的是这样一种技术:当类对象不在域(go out of scope)中时,就调用类的析构函数。析构函数然后会释放所有由该对象所申请的资源。RAII通常用于很紧缺的资源,或那些在被释放时必须要有可预测点(predictable point)的资源。我们这里这个类只是一个简单的例子而已。



AutoReset::AutoReset(int *scoped_variable,int new_value)
 {
    scoped_variable_=scoped_variable;
    original_value=*scoped_variable;
    *scoped_variable=new_value;
 }
AutoReset::~AutoReset()
{
    *scoped_variable_=original_value;
}          


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值