auto_reset.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef BASE_AUTO_RESET_H_ 6#define BASE_AUTO_RESET_H_ 7 8#include "base/basictypes.h" 9 10// AutoResetValue is useful for setting a variable to some value only 11// during a particular scope. If you have code that has to add "var = 12// false;" or "var = old_var;" at all the exit points of a block, for 13// example, you would benefit from using this instead. 14// 15// This should be obvious, but note that the AutoResetValue instance 16// should have a shorter lifetime than the scoped_variable, to prevent 17// writing to invalid memory when the AutoResetValue goes out of 18// scope. 19 20template<typename T> 21class AutoReset { 22 public: 23 AutoReset(T* scoped_variable, T new_value) 24 : scoped_variable_(scoped_variable), 25 original_value_(*scoped_variable) { 26 *scoped_variable_ = new_value; 27 } 28 29 ~AutoReset() { *scoped_variable_ = original_value_; } 30 31 private: 32 T* scoped_variable_; 33 T original_value_; 34 35 DISALLOW_COPY_AND_ASSIGN(AutoReset); 36}; 37 38#endif // BASE_AUTO_RESET_H_ 39