<new>運算子</new>
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
delete 運算子 | [operator delete]](#operator_delete_arr) | new 運算子 |
new [] 運算子 |
delete 運算子
由 delete 陳述式呼叫的函式,藉此取消配置物件個體的儲存區。
void operator delete(void* ptr) throw();
void operator delete(void *,
void*) throw();
void operator delete(void* ptr,
const std::nothrow_t&) throw();
參數
ptr
指標,其值就是要呈現此刪除動作無效。
備註
第一個函式會刪除運算式來呈現的值呼叫ptr
無效。 程式可以定義使用 Standard c + + 程式庫所定義的預設版本會取代此函式簽章的函式。 所需的行為是接受的值ptr
也就是 null,或是傳回之前呼叫new 運算子( size_t)。
Null 值的預設行為ptr
是需要執行任何動作。 任何其他值的ptr
必須是藉由呼叫,如先前所述稍早傳回的值。 這類非 null 值的預設行為ptr
是回收先前呼叫所配置的儲存體。 它不會指定在哪些情況下這類回收儲存區的部分或全部已由所配置的後續呼叫operator new
( size_t),或任何calloc
( size_t), malloc
( size_t),或realloc
( void*, size_t)。
第二個函式會呼叫對應至新的運算式,表單的位置刪除運算式新( std:: size_t)。 它會執行任何動作。
第三個函式會呼叫對應至新的運算式,表單的位置刪除運算式新( std:: size_t, conststd::nothrow_t i)。 程式可以定義使用 Standard c + + 程式庫所定義的預設版本會取代此函式簽章的函式。 所需的行為是接受的值ptr
也就是 null,或是傳回之前呼叫operator new
( size_t)。 預設行為是評估刪除( ptr
)。
範例
請參閱new 運算子使用例如operator delete
。
operator delete]
由 delete 陳述式呼叫的函式,藉此取消配置物件陣列的儲存區。
void operator delete[](void* ptr) throw();
void operator delete[](void *,
void*) throw();
void operator delete[](void* ptr,
const std::nothrow_t&) throw();
參數
ptr
指標,其值就是要呈現此刪除動作無效。
備註
第一個函式會呼叫delete[]
要轉譯的值運算式ptr
無效。 函式是可取代,因為程式可以定義使用 Standard c + + 程式庫所定義的預設版本會取代此函式簽章的函式。 所需的行為是接受的值ptr
也就是 null,或是傳回之前呼叫new [] 運算子( size_t)。 Null 值的預設行為ptr
是需要執行任何動作。 任何其他值的ptr
必須是藉由呼叫,如先前所述稍早傳回的值。 這類非 null 值的預設行為ptr
是回收先前呼叫所配置的儲存體。 它不會指定在哪些情況下這類回收儲存區的部分或全部所配置的後續呼叫new 運算子( size_t),或任何calloc
( size_t), malloc
( size_t),或realloc
( void*, size_t)。
第二個函式會呼叫放置delete[]
運算式對應到new[]
格式的運算式new[]
( std:: size_t)。 它會執行任何動作。
第三個函式會呼叫位置刪除運算式對應至的new[]
格式的運算式new[]
( std:: size_t, const std::nothrow_t i)。 程式可以定義使用 Standard c + + 程式庫所定義的預設版本會取代此函式簽章的函式。 所需的行為是接受的值ptr
也就是 null,或是傳回運算子之前呼叫new[]
( size_t)。 預設行為是評估delete[]
( ptr
)。
範例
請參閱new [] 運算子的使用範例operator delete[]
。
new 運算子
函式,呼叫新的運算式所配置個別物件儲存區。
void* operator new(std::size_t count) throw(bad_alloc);
void* operator new(std::size_t count,
const std::nothrow_t&) throw();
void* operator new(std::size_t count,
void* ptr) throw();
參數
count
配置儲存區的位元組數目。
ptr
要傳回的指標。
傳回值
新配置的儲存體的最低位元組位址指標。 或ptr.
備註
第一個函式會配置新的運算式呼叫count
位元組的儲存空間適當地對齊來代表任何規模的物件。 程式可以定義使用這個函式簽章來取代標準的 c + + 程式庫所定義的預設版本,因此可取代的替代函式。
所需的行為是儲存體可配置要求時,才會傳回非 null 指標。 每個這類的配置會從任何其他已配置的儲存體產生不相鄰的儲存體的指標。 順序和後續的呼叫所配置的儲存體的接近程度會是 unspecified。 未指定初始儲存的值。 傳回的指標會指向配置的儲存體開始 (最低位元組位址)。 如果計數為零,傳回的值不會比較等於任何函式傳回的值。
預設行為是執行迴圈。 在迴圈內,函式會先嘗試配置要求的儲存體。 在嘗試是否包含在呼叫malloc
( size_t) 未指定。 如果嘗試成功,函式傳回的指標配置的儲存體。 否則,函式呼叫所指定新處理常式。 如果呼叫的函式會傳回,迴圈會重複。 迴圈會終止嘗試配置要求的儲存體成功或不會傳回呼叫的函式。
新的處理常式所需的行為是執行下列作業之一︰
讓更多儲存空間可進行配置,然後傳回。
呼叫中止或結束(
int
)。擲回型別的物件bad_alloc。
預設行為新處理常式擲回型別的物件是bad_alloc
。 Null 指標指定的預設新處理常式。
順序和後續呼叫所配置的儲存體的接近程度operator new
( size_t) 為未指定,會儲存在該處的起始值。
第二個函式會呼叫放置新的運算式配置count
位元組的儲存空間適當地對齊來代表任何規模的物件。 程式可以定義使用這個函式簽章來取代標準的 c + + 程式庫所定義的預設版本,因此可取代的替代函式。
預設行為是將傳回operator new
( count
) 如果該函式成功。 否則,它會傳回 null 指標。
第三個函式會呼叫放置新格式的運算式新( args) t。在這裡, args組成的單一物件的指標。 這可用於建構在已知的位址之物件。 此函數會傳回ptr。
要釋放配置的儲存體operator new
,呼叫delete 運算子。
如需擲回或新的請參閱 nonthrowing 行為新和 delete 運算子。
範例
// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass( )
{
cout << "Construction MyClass." << this << endl;
};
~MyClass( )
{
imember = 0; cout << "Destructing MyClass." << this << endl;
};
int imember;
};
int main( )
{
// The first form of new delete
MyClass* fPtr = new MyClass;
delete fPtr;
// The second form of new delete
MyClass* fPtr2 = new( nothrow ) MyClass;
delete fPtr2;
// The third form of new delete
char x[sizeof( MyClass )];
MyClass* fPtr3 = new( &x[0] ) MyClass;
fPtr3 -> ~MyClass();
cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}
new [] 運算子
物件陣列配置儲存區的新運算式所呼叫的配置函式。
void* operator new[](std::size_t count) throw(std::bad_alloc);
void* operator new[](std::size_t count,
const std::nothrow_t&) throw();
void* operator new[](std::size_t count,
void* ptr) throw();
參數
count
位元組陣列物件配置的儲存體的數目。
ptr
要傳回的指標。
傳回值
新配置的儲存體的最低位元組位址指標。 或ptr.
備註
第一個函式會呼叫new[]
運算式配置count
位元組的適當對齊以代表陣列的任何物件的大小或更小的儲存空間。 程式可以定義使用 Standard c + + 程式庫所定義的預設版本會取代此函式簽章的函式。 所需的行為是相同new 運算子( size_t)。 預設行為是將傳回operator new
( count
)。
第二個函式會呼叫放置new[]
運算式配置count
位元組的儲存空間適當地對齊來代表陣列的任何物件的大小。 程式可以定義使用 Standard c + + 程式庫所定義的預設版本會取代此函式簽章的函式。 預設行為是將傳回operatornew( count
) 如果該函式成功。 否則,它會傳回 null 指標。
第三個函式會呼叫放置new[]
格式的運算式新( args) T[ N]。 在這裡, args組成的單一物件的指標。 函式會傳回 ptr
。
要釋放配置的儲存體operator new[]
,呼叫運算子 delete []。
如需擲回或新的請參閱 nonthrowing 行為新和 delete 運算子。
範例
// new_op_alloc.cpp
// compile with: /EHsc
#include <new>
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "Construction MyClass." << this << endl;
};
~MyClass() {
imember = 0; cout << "Destructing MyClass." << this << endl;
};
int imember;
};
int main() {
// The first form of new delete
MyClass* fPtr = new MyClass[2];
delete[ ] fPtr;
// The second form of new delete
char x[2 * sizeof( MyClass ) + sizeof(int)];
MyClass* fPtr2 = new( &x[0] ) MyClass[2];
fPtr2[1].~MyClass();
fPtr2[0].~MyClass();
cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
// The third form of new delete
MyClass* fPtr3 = new( nothrow ) MyClass[2];
delete[ ] fPtr3;
}