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 31class NSAutoreleasePool; 32#endif 33 34namespace rtc { 35 36class 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 DISALLOW_EVIL_CONSTRUCTORS(ScopedAutoreleasePool); 54}; 55 56} // namespace rtc 57 58#endif // WEBRTC_MAC 59#endif // WEBRTC_BASE_SCOPED_AUTORELEASE_POOL_H__ 60