tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ScopedICUObject.h (1070B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 #ifndef intl_components_ScopedICUObject_h
      5 #define intl_components_ScopedICUObject_h
      6 
      7 /*
      8 * A simple RAII class to assure ICU objects are automatically deallocated at
      9 * scope end.  Unfortunately, ICU's C++ API is uniformly unstable, so we can't
     10 * use its smart pointers for this.
     11 */
     12 
     13 namespace mozilla::intl {
     14 
     15 template <typename T, void(Delete)(T*)>
     16 class ScopedICUObject {
     17  T* ptr_;
     18 
     19 public:
     20  explicit ScopedICUObject(T* ptr) : ptr_(ptr) {}
     21 
     22  ~ScopedICUObject() {
     23    if (ptr_) {
     24      Delete(ptr_);
     25    }
     26  }
     27 
     28  // In cases where an object should be deleted on abnormal exits,
     29  // but returned to the caller if everything goes well, call forget()
     30  // to transfer the object just before returning.
     31  T* forget() {
     32    T* tmp = ptr_;
     33    ptr_ = nullptr;
     34    return tmp;
     35  }
     36 };
     37 
     38 }  // namespace mozilla::intl
     39 
     40 #endif /* intl_components_ScopedICUObject_h */