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. new(size_t size)48 void* operator new(size_t size) throw() { return NULL; } delete(void * ptr)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