Home | History | Annotate | Download | only in base
      1 /*
      2  *  Copyright 2008 The WebRTC Project Authors. All rights reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 // Automatically initialize and and free an autoreleasepool. Never allocate
     12 // an instance of this class using "new" - that will result in a compile-time
     13 // error. Only use it as a stack object.
     14 //
     15 // Note: NSAutoreleasePool docs say that you should not normally need to
     16 // declare an NSAutoreleasePool as a member of an object - but there's nothing
     17 // that indicates it will be a problem, as long as the stack lifetime of the
     18 // pool exactly matches the stack lifetime of the object.
     19 
     20 #ifndef WEBRTC_BASE_SCOPED_AUTORELEASE_POOL_H__
     21 #define WEBRTC_BASE_SCOPED_AUTORELEASE_POOL_H__
     22 
     23 #if defined(WEBRTC_MAC)
     24 
     25 #include "webrtc/base/common.h"
     26 
     27 // This header may be included from Obj-C files or C++ files.
     28 #ifdef __OBJC__
     29 @class NSAutoreleasePool;
     30 #else
     31 class NSAutoreleasePool;
     32 #endif
     33 
     34 namespace rtc {
     35 
     36 class ScopedAutoreleasePool {
     37  public:
     38   ScopedAutoreleasePool();
     39   ~ScopedAutoreleasePool();
     40 
     41  private:
     42   // Declaring private overrides of new and delete here enforces the "only use
     43   // as a stack object" discipline.
     44   //
     45   // Note: new is declared as "throw()" to get around a gcc warning about new
     46   // returning NULL, but this method will never get called and therefore will
     47   // never actually throw any exception.
     48   void* operator new(size_t size) throw() { return NULL; }
     49   void operator delete (void* ptr) {}
     50 
     51   NSAutoreleasePool* pool_;
     52 
     53   RTC_DISALLOW_COPY_AND_ASSIGN(ScopedAutoreleasePool);
     54 };
     55 
     56 }  // namespace rtc
     57 
     58 #endif  // WEBRTC_MAC
     59 #endif  // WEBRTC_BASE_SCOPED_AUTORELEASE_POOL_H__
     60