home | help
std::nothrow(3) 	       C++ Standard Libary		 std::nothrow(3)

NAME
     std::nothrow - std::nothrow

Synopsis
	Defined in header <new>
	struct	 nothrow_t  {}; 					  (until
     C++11)
	struct nothrow_t { explicit nothrow_t() =  default;  };  (1)	  (since
     C++11)
	extern const std::nothrow_t nothrow;			  (2)

	std::nothrow_t is an empty class type used to disambiguate the overloads
     of throwing
	and non-throwing allocation functions. std::nothrow is a constant of it.

Example
     // Run this code

      #include <iostream>
      #include <new>

      int main()
      {
	  try
	  {
	      while (true)
	      {
		  new int[100000000ul];   // throwing overload
	      }
	  }
	  catch (const std::bad_alloc& e)
	  {
	      std::cout << e.what() << '\n';
	  }

	  while (true)
	  {
	      int* p = new(std::nothrow) int[100000000ul]; // non-throwing over-
     load
	      if (p == nullptr)
	      {
		  std::cout << "Allocation returned nullptr\n";
		  break;
	      }
	  }
      }

Output:
      std::bad_alloc
      Allocation returned nullptr

	Defect reports

	The  following	behavior-changing  defect  reports were applied retroac-
     tively to
	previously published C++ standards.

	   DR	 Applied to		 Behavior as published		    Cor-
     rect behavior
	LWG 2510 C++11	    the default constructor was non-explicit, which made
     explicit
			    could lead to ambiguity

See also
	operator new   allocation functions
	operator new[] (function)

http://cppreference.com 	   2024.06.10			 std::nothrow(3)

home | help