Aracılığıyla paylaş


<new> işlevleri

get_new_handler

new_handler get_new_handler() noexcept;

Açıklamalar

Geçerli new_handlerdeğerini döndürür.

Aklamak

template <class T>
    constexpr T* launder(T* ptr) noexcept;

Parametreler

ptr
Türü T'ye benzeyen bir nesneyi tutan bellekteki bayt adresi.

Dönüş Değeri

X'e işaret eden T* türünde bir değer.

Açıklamalar

İşaretçi iyileştirme engeli olarak da adlandırılır.

Bağımsız değişkeninin değeri sabit ifadede kullanılabildiğinde sabit ifade olarak kullanılır. Bir bayt depolamaya, başka bir nesnenin kapladığı depolama alanı içinde benzer işaretçiye sahip bir nesneyse, nesneyi işaret eden bir işaretçi değeri aracılığıyla ulaşılabilir.

Örnek

struct X { const int n; };

X *p = new X{3};
const int a = p->n;
new (p) X{5}; // p does not point to new object because X::n is const
const int b = p->n; // undefined behavior
const int c = std::launder(p)->n; // OK

nothrow

ve deletesürümleri new için nothrow bağımsız değişken olarak kullanılacak bir nesne sağlar.

extern const std::nothrow_t nothrow;

Açıklamalar

nesnesi, std::nothrow_t parametre türüyle eşleşmesi için işlev bağımsız değişkeni olarak kullanılır.

Örnek

İşlev parametresi olarak nasıl std::nothrow_t kullanıldığına ilişkin örnekler için bkzoperator new. veoperator new[].

set_new_handler

Yeni işleci bellek ayırma girişiminde başarısız olduğunda çağrılacak bir kullanıcı işlevi yükler.

new_handler set_new_handler(new_handler Pnew) throw();

Parametreler

Pnew
new_handler yüklenecek.

Dönüş Değeri

İlk aramada 0 ve sonraki aramalarda önceki new_handler .

Açıklamalar

İşlev, koruduğu statik new işleyici işaretçisinde depolar Pnew ve daha önce işaretçide depolanan değeri döndürür. İşleyici new tarafından operator newkullanılır.

Örnek

// new_set_new_handler.cpp
// compile with: /EHsc
#include<new>
#include<iostream>

using namespace std;
void __cdecl newhandler( )
{
   cout << "The new_handler is called:" << endl;
   throw bad_alloc( );
   return;
}

int main( )
{
   set_new_handler (newhandler);
   try
   {
      while ( 1 )
      {
         new int[5000000];
         cout << "Allocating 5000000 ints." << endl;
      }
   }
   catch ( exception e )
   {
      cout << e.what( ) << endl;
   }
}
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
The new_handler is called:
bad allocation