diff options
Diffstat (limited to 'gcc-4.4.3/libstdc++-v3/include/backward/auto_ptr.h')
-rw-r--r-- | gcc-4.4.3/libstdc++-v3/include/backward/auto_ptr.h | 292 |
1 files changed, 0 insertions, 292 deletions
diff --git a/gcc-4.4.3/libstdc++-v3/include/backward/auto_ptr.h b/gcc-4.4.3/libstdc++-v3/include/backward/auto_ptr.h deleted file mode 100644 index 4554d7a87..000000000 --- a/gcc-4.4.3/libstdc++-v3/include/backward/auto_ptr.h +++ /dev/null @@ -1,292 +0,0 @@ -// auto_ptr implementation -*- C++ -*- - -// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file backward/auto_ptr.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _STL_AUTO_PTR_H -#define _STL_AUTO_PTR_H 1 - -#include <bits/c++config.h> -#include <debug/debug.h> - -_GLIBCXX_BEGIN_NAMESPACE(std) - - /** - * A wrapper class to provide auto_ptr with reference semantics. - * For example, an auto_ptr can be assigned (or constructed from) - * the result of a function which returns an auto_ptr by value. - * - * All the auto_ptr_ref stuff should happen behind the scenes. - */ - template<typename _Tp1> - struct auto_ptr_ref - { - _Tp1* _M_ptr; - - explicit - auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } - } _GLIBCXX_DEPRECATED_ATTR; - - - /** - * @brief A simple smart pointer providing strict ownership semantics. - * - * The Standard says: - * <pre> - * An @c auto_ptr owns the object it holds a pointer to. Copying - * an @c auto_ptr copies the pointer and transfers ownership to the - * destination. If more than one @c auto_ptr owns the same object - * at the same time the behavior of the program is undefined. - * - * The uses of @c auto_ptr include providing temporary - * exception-safety for dynamically allocated memory, passing - * ownership of dynamically allocated memory to a function, and - * returning dynamically allocated memory from a function. @c - * auto_ptr does not meet the CopyConstructible and Assignable - * requirements for Standard Library <a - * href="tables.html#65">container</a> elements and thus - * instantiating a Standard Library container with an @c auto_ptr - * results in undefined behavior. - * </pre> - * Quoted from [20.4.5]/3. - * - * Good examples of what can and cannot be done with auto_ptr can - * be found in the libstdc++ testsuite. - * - * _GLIBCXX_RESOLVE_LIB_DEFECTS - * 127. auto_ptr<> conversion issues - * These resolutions have all been incorporated. - */ - template<typename _Tp> - class auto_ptr - { - private: - _Tp* _M_ptr; - - public: - /// The pointed-to type. - typedef _Tp element_type; - - /** - * @brief An %auto_ptr is usually constructed from a raw pointer. - * @param p A pointer (defaults to NULL). - * - * This object now @e owns the object pointed to by @a p. - */ - explicit - auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } - - /** - * @brief An %auto_ptr can be constructed from another %auto_ptr. - * @param a Another %auto_ptr of the same type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownership. - */ - auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } - - /** - * @brief An %auto_ptr can be constructed from another %auto_ptr. - * @param a Another %auto_ptr of a different but related type. - * - * A pointer-to-Tp1 must be convertible to a - * pointer-to-Tp/element_type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownership. - */ - template<typename _Tp1> - auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } - - /** - * @brief %auto_ptr assignment operator. - * @param a Another %auto_ptr of the same type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownership. The object that this one @e - * used to own and track has been deleted. - */ - auto_ptr& - operator=(auto_ptr& __a) throw() - { - reset(__a.release()); - return *this; - } - - /** - * @brief %auto_ptr assignment operator. - * @param a Another %auto_ptr of a different but related type. - * - * A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type. - * - * This object now @e owns the object previously owned by @a a, - * which has given up ownership. The object that this one @e - * used to own and track has been deleted. - */ - template<typename _Tp1> - auto_ptr& - operator=(auto_ptr<_Tp1>& __a) throw() - { - reset(__a.release()); - return *this; - } - - /** - * When the %auto_ptr goes out of scope, the object it owns is - * deleted. If it no longer owns anything (i.e., @c get() is - * @c NULL), then this has no effect. - * - * The C++ standard says there is supposed to be an empty throw - * specification here, but omitting it is standard conforming. Its - * presence can be detected only if _Tp::~_Tp() throws, but this is - * prohibited. [17.4.3.6]/2 - */ - ~auto_ptr() { delete _M_ptr; } - - /** - * @brief Smart pointer dereferencing. - * - * If this %auto_ptr no longer owns anything, then this - * operation will crash. (For a smart pointer, "no longer owns - * anything" is the same as being a null pointer, and you know - * what happens when you dereference one of those...) - */ - element_type& - operator*() const throw() - { - _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); - return *_M_ptr; - } - - /** - * @brief Smart pointer dereferencing. - * - * This returns the pointer itself, which the language then will - * automatically cause to be dereferenced. - */ - element_type* - operator->() const throw() - { - _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); - return _M_ptr; - } - - /** - * @brief Bypassing the smart pointer. - * @return The raw pointer being managed. - * - * You can get a copy of the pointer that this object owns, for - * situations such as passing to a function which only accepts - * a raw pointer. - * - * @note This %auto_ptr still owns the memory. - */ - element_type* - get() const throw() { return _M_ptr; } - - /** - * @brief Bypassing the smart pointer. - * @return The raw pointer being managed. - * - * You can get a copy of the pointer that this object owns, for - * situations such as passing to a function which only accepts - * a raw pointer. - * - * @note This %auto_ptr no longer owns the memory. When this object - * goes out of scope, nothing will happen. - */ - element_type* - release() throw() - { - element_type* __tmp = _M_ptr; - _M_ptr = 0; - return __tmp; - } - - /** - * @brief Forcibly deletes the managed object. - * @param p A pointer (defaults to NULL). - * - * This object now @e owns the object pointed to by @a p. The - * previous object has been deleted. - */ - void - reset(element_type* __p = 0) throw() - { - if (__p != _M_ptr) - { - delete _M_ptr; - _M_ptr = __p; - } - } - - /** - * @brief Automatic conversions - * - * These operations convert an %auto_ptr into and from an auto_ptr_ref - * automatically as needed. This allows constructs such as - * @code - * auto_ptr<Derived> func_returning_auto_ptr(.....); - * ... - * auto_ptr<Base> ptr = func_returning_auto_ptr(.....); - * @endcode - */ - auto_ptr(auto_ptr_ref<element_type> __ref) throw() - : _M_ptr(__ref._M_ptr) { } - - auto_ptr& - operator=(auto_ptr_ref<element_type> __ref) throw() - { - if (__ref._M_ptr != this->get()) - { - delete _M_ptr; - _M_ptr = __ref._M_ptr; - } - return *this; - } - - template<typename _Tp1> - operator auto_ptr_ref<_Tp1>() throw() - { return auto_ptr_ref<_Tp1>(this->release()); } - - template<typename _Tp1> - operator auto_ptr<_Tp1>() throw() - { return auto_ptr<_Tp1>(this->release()); } - } _GLIBCXX_DEPRECATED_ATTR; - - // _GLIBCXX_RESOLVE_LIB_DEFECTS - // 541. shared_ptr template assignment and void - template<> - class auto_ptr<void> - { - public: - typedef void element_type; - } _GLIBCXX_DEPRECATED_ATTR; - -_GLIBCXX_END_NAMESPACE - -#endif /* _STL_AUTO_PTR_H */ |