<new>
函式
get_new_handler
new_handler get_new_handler() noexcept;
備註
傳回目前的 new_handler
。
清洗
template <class T>
constexpr T* launder(T* ptr) noexcept;
參數
ptr
記憶體中位元組的位址,其保存類型類似於 T 的物件。
傳回值
指向 X 之 T* 類型的值。
備註
也稱為指標優化屏障。
當其自變數的值可用於常數表達式時,用作常數表達式。 如果位於另一個物件所佔用的記憶體內,可透過指向物件的指標值來存取記憶體位元組,而該物件具有類似的指標。
範例
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
提供物件,以做為 和 delete
版本的new
自變數nothrow
。
extern const std::nothrow_t nothrow;
備註
此物件是用來作為函式引數,以符合參數類型 std::nothrow_t。
範例
如需如何使用 std::nothrow_t
作為函式參數的範例,請參閱 operator new
和 operator new[]
。
set_new_handler
安裝使用者函式,這個函式會在運算元 new 嘗試配置記憶體時失敗時呼叫。
new_handler set_new_handler(new_handler Pnew) throw();
參數
Pnew
new_handler
要安裝的 。
傳回值
第一次呼叫時,會傳回 0,後續呼叫時,則傳回前一個 new_handler
。
備註
函式會 Pnew
儲存在它所維護的靜態 new
處理程式 指標中,然後傳回先前儲存在指標中的值。 處理程式 new
是由 operator new
使用。
範例
// 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