0,0 → 1,122 |
// The -*- C++ -*- dynamic memory management header. |
|
// Copyright (C) 1994-2013 Free Software Foundation, Inc. |
|
// This file is part of GCC. |
// |
// GCC 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. |
// |
// GCC 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 new |
* This is a Standard C++ Library header. |
* |
* The header @c new defines several functions to manage dynamic memory and |
* handling memory allocation errors; see |
* http://gcc.gnu.org/onlinedocs/libstdc++/18_support/howto.html#4 for more. |
*/ |
|
#ifndef _NEW |
#define _NEW |
|
#pragma GCC system_header |
|
#include <bits/c++config.h> |
#include <exception> |
|
#pragma GCC visibility push(default) |
|
extern "C++" { |
|
namespace std |
{ |
/** |
* @brief Exception possibly thrown by @c new. |
* @ingroup exceptions |
* |
* @c bad_alloc (or classes derived from it) is used to report allocation |
* errors from the throwing forms of @c new. */ |
class bad_alloc : public exception |
{ |
public: |
bad_alloc() throw() { } |
|
// This declaration is not useless: |
// http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 |
virtual ~bad_alloc() throw(); |
|
// See comment in eh_exception.cc. |
virtual const char* what() const throw(); |
}; |
|
struct nothrow_t { }; |
|
extern const nothrow_t nothrow; |
|
/** If you write your own error handler to be called by @c new, it must |
* be of this type. */ |
typedef void (*new_handler)(); |
|
/// Takes a replacement handler as the argument, returns the |
/// previous handler. |
new_handler set_new_handler(new_handler) throw(); |
} // namespace std |
|
//@{ |
/** These are replaceable signatures: |
* - normal single new and delete (no arguments, throw @c bad_alloc on error) |
* - normal array new and delete (same) |
* - @c nothrow single new and delete (take a @c nothrow argument, return |
* @c NULL on error) |
* - @c nothrow array new and delete (same) |
* |
* Placement new and delete signatures (take a memory address argument, |
* does nothing) may not be replaced by a user's program. |
*/ |
void* operator new(std::size_t) _GLIBCXX_THROW (std::bad_alloc) |
__attribute__((__externally_visible__)); |
void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc) |
__attribute__((__externally_visible__)); |
void operator delete(void*) _GLIBCXX_USE_NOEXCEPT |
__attribute__((__externally_visible__)); |
void operator delete[](void*) _GLIBCXX_USE_NOEXCEPT |
__attribute__((__externally_visible__)); |
void* operator new(std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT |
__attribute__((__externally_visible__)); |
void* operator new[](std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT |
__attribute__((__externally_visible__)); |
void operator delete(void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT |
__attribute__((__externally_visible__)); |
void operator delete[](void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT |
__attribute__((__externally_visible__)); |
|
// Default placement versions of operator new. |
inline void* operator new(std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT |
{ return __p; } |
inline void* operator new[](std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT |
{ return __p; } |
|
// Default placement versions of operator delete. |
inline void operator delete (void*, void*) _GLIBCXX_USE_NOEXCEPT { } |
inline void operator delete[](void*, void*) _GLIBCXX_USE_NOEXCEPT { } |
//@} |
} // extern "C++" |
|
#pragma GCC visibility pop |
|
#endif |