优势:即使程序异常退出,也会调用类的析构函数,变量状态依然可以还原。
保存类的源码
template class Save { protected: Type &_var; Type _save_value; public: Save(Type &elem):_var(elem),_save_value(elem){} ~Save(){_var = _save_value;} };
例子:
我们创建一个函数
void start(int &x) { Save<int> temp(x); x=3; std::cout<<"start x:"<std::endl; }
在主函数中调用
int main() { int x=2; start(x); std::cout<<"main x:"<std::end; }
运行
start x:3
main x:2