<new>
operator dan enum
enum align_val_t
enum class align_val_t : size_t {};
operator delete
Fungsi yang dipanggil oleh ekspresi untuk membatalkan alokasi delete
penyimpanan untuk objek individual.
void operator delete(void* ptr) noexcept;
void operator delete(void *, void*) noexcept;
void operator delete(void* ptr, const std::nothrow_t&) noexcept;
Parameter
ptr
Penunjuk yang nilainya akan dirender tidak valid oleh penghapusan.
Keterangan
Fungsi pertama dipanggil oleh delete
ekspresi untuk merender nilai yang ptr
tidak valid. Program dapat menentukan fungsi dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++. Perilaku yang diperlukan adalah menerima nilai ptr
itu nullptr
atau yang dikembalikan oleh panggilan sebelumnya ke operator new
.
Perilaku default untuk nullptr
nilai adalah ptr
tidak melakukan apa-apa. Nilai lain harus ptr
berupa nilai yang dikembalikan sebelumnya oleh panggilan seperti yang new
dijelaskan sebelumnya. Perilaku default untuk nilai ptr
non-null adalah mengklaim kembali penyimpanan yang dialokasikan oleh panggilan sebelumnya. Ini tidak ditentukan dalam kondisi apa bagian atau semua penyimpanan yang diklaim kembali tersebut dialokasikan oleh panggilan berikutnya ke operator new
, atau ke salah calloc
satu fungsi , , malloc
atau realloc
.
Fungsi kedua dipanggil oleh ekspresi penempatan delete
yang new
sesuai dengan ekspresi formulir new( std::size_t )
. Ini tidak melakukan apa-apa.
Fungsi ketiga dipanggil oleh ekspresi penempatan delete
yang new
sesuai dengan ekspresi formulir new( std::size_t, const std::nothrow_t& )
. Program dapat menentukan fungsi dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++. Perilaku yang diperlukan adalah menerima nilai ptr
yaitu nullptr
atau yang dikembalikan oleh panggilan sebelumnya ke operator new
. Perilaku defaultnya adalah mengevaluasi delete( ptr )
.
Contoh
Lihat operator new
contoh yang menggunakan operator delete
.
operator delete[]
Fungsi yang delete
dipanggil oleh ekspresi untuk membatalkan alokasi penyimpanan untuk array objek.
void operator delete[](void* ptr) noexcept;
void operator delete[](void *, void*) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&) noexcept;
Parameter
ptr
Penunjuk yang nilainya akan dirender tidak valid oleh penghapusan.
Keterangan
Fungsi pertama dipanggil oleh delete[]
ekspresi untuk merender nilai yang ptr
tidak valid. Fungsi dapat diganti karena program dapat menentukan fungsi dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++. Perilaku yang diperlukan adalah menerima nilai ptr
yaitu nullptr
atau yang dikembalikan oleh panggilan sebelumnya ke operator new[]
. Perilaku default untuk nilai ptr
null adalah tidak melakukan apa-apa. Nilai lain harus ptr
berupa nilai yang dikembalikan sebelumnya oleh panggilan seperti yang dijelaskan sebelumnya. Perilaku default untuk nilai non-null seperti ptr
itu adalah mengklaim kembali penyimpanan yang dialokasikan oleh panggilan sebelumnya. Ini tidak ditentukan dalam kondisi apa bagian atau semua penyimpanan yang diklaim kembali tersebut dialokasikan oleh panggilan berikutnya ke operator new
, atau ke salah calloc
satu fungsi , , malloc
atau realloc
.
Fungsi kedua dipanggil oleh ekspresi penempatan delete[]
yang new[]
sesuai dengan ekspresi formulir new[]( std::size_t )
. Ini tidak melakukan apa-apa.
Fungsi ketiga dipanggil oleh ekspresi penempatan delete[]
yang new[]
sesuai dengan ekspresi formulir new[]( std::size_t, const std::nothrow_t& )
. Program dapat menentukan fungsi dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++. Perilaku yang diperlukan adalah menerima nilai ptr
yaitu nullptr
atau yang dikembalikan oleh panggilan sebelumnya ke operator new[]
. Perilaku defaultnya adalah mengevaluasi delete[]( ptr )
.
Contoh
Lihat operator new[]
contoh penggunaan operator delete[]
.
operator new
Fungsi yang dipanggil oleh ekspresi baru untuk mengalokasikan penyimpanan untuk objek individual.
void* operator new(std::size_t count);
void* operator new(std::size_t count, const std::nothrow_t&) noexcept;
void* operator new(std::size_t count, void* ptr) noexcept;
Parameter
count
Jumlah byte penyimpanan yang akan dialokasikan.
ptr
Penunjuk yang akan dikembalikan.
Nilai hasil
Penunjuk ke alamat byte terendah dari penyimpanan yang baru dialokasikan. Atau ptr
, jika menggunakan bentuk ketiga fungsi.
Keterangan
Fungsi pertama dipanggil oleh new
ekspresi untuk mengalokasikan count
byte penyimpanan yang cocok diselaraskan untuk mewakili objek apa pun dari ukuran tersebut. Fungsi ini dapat diganti. Ini berarti program dapat menentukan fungsi alternatif dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++.
Perilaku yang diperlukan adalah mengembalikan pointer non-null hanya jika penyimpanan dapat dialokasikan seperti yang diminta. Setiap alokasi tersebut menghasilkan pointer ke penyimpanan yang putus-putus dari penyimpanan lain yang dialokasikan. Urutan dan kesesuaian penyimpanan yang dialokasikan oleh panggilan berturut-turut tidak ditentukan. Nilai awal yang disimpan tidak ditentukan. Pointer yang dikembalikan menunjuk ke awal (alamat byte terendah) dari penyimpanan yang dialokasikan. Jika count
nol, nilai yang dikembalikan tidak dibandingkan dengan nilai lain yang dikembalikan oleh fungsi.
Perilaku defaultnya adalah menjalankan perulangan. Dalam perulangan, fungsi pertama-tama mencoba mengalokasikan penyimpanan yang diminta. Apakah upaya melibatkan panggilan ke malloc
tidak ditentukan. Jika upaya alokasi berhasil, fungsi mengembalikan penunjuk ke penyimpanan yang dialokasikan. Jika tidak, fungsi memanggil fungsi jenis yang ditunjuk new_handler
. Jika fungsi yang dipanggil kembali, perulangan akan diulang. Perulangan berakhir ketika upaya untuk mengalokasikan penyimpanan yang diminta berhasil atau ketika fungsi yang disebut tidak kembali.
Perilaku yang diperlukan dari fungsi jenis new_handler
adalah melakukan salah satu operasi berikut:
Buat lebih banyak penyimpanan tersedia untuk alokasi lalu kembalikan.
Panggil atau
abort
exit
.Lempar objek jenis
bad_alloc
.
Perilaku default fungsi new_handler
adalah melemparkan objek jenis bad_alloc
. Nilai nullptr
menunjuk fungsi default new_handler
.
Urutan dan kesesuaian penyimpanan yang dialokasikan oleh panggilan berturut-turut operator new
tidak ditentukan, seperti halnya nilai awal yang disimpan di sana.
Untuk membebaskan penyimpanan yang dialokasikan oleh bentuk pertama , operator new
panggil operator delete
.
Fungsi kedua dipanggil oleh ekspresi penempatan new
untuk mengalokasikan count
byte penyimpanan yang cocok diselaraskan untuk mewakili objek apa pun dengan ukuran tersebut. Fungsi ini dapat diganti. Ini berarti program dapat menentukan fungsi alternatif dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++.
Perilaku default adalah mengembalikan operator new( count )
jika fungsi tersebut berhasil. Jika tidak, ia kembali nullptr
.
Untuk membebaskan penyimpanan yang dialokasikan oleh bentuk operator new
kedua (yaitu, jika tidak mengembalikan nullptr
), panggil operator delete
.
Fungsi ketiga dipanggil oleh ekspresi penempatan new
non-alokasi, dari formulir new ( ptr ) T
. Di sini, ptr
terdiri dari penunjuk objek tunggal. Ini dapat berguna untuk membuat objek di alamat yang diketahui. Fungsi mengembalikan ptr
. Anda harus memanggil destructor secara eksplisit pada objek ini.
Jika Anda memanggil penempatan new
non-alokasi, jangan panggil delete
. Sebagai gantinya, panggil deallocator untuk memori yang Anda berikan, jika perlu, setelah Anda memanggil destruktor untuk objek.
Untuk informasi tentang perilaku pelemparan atau non-pelemparan new
, lihat Operator new
dan delete
.
Contoh
// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>
using namespace std;
class MyClass {
int member{ 0 };
public:
MyClass() {
cout << "MyClass at 0x" << this << " constructed.\n";
};
~MyClass() {
cout << "MyClass at 0x" << this << " destroyed.\n";
};
};
int main( )
{
// The first form of new / delete
MyClass* fPtr1 = new MyClass;
delete fPtr1;
// The second form (fail returns nullptr) of new / delete
MyClass* fPtr2 = new(nothrow) MyClass[2];
if (fPtr2)
delete fPtr2;
// The third form (non-allocating placement) of new / delete
char x[sizeof(MyClass)]; // x is automatic
MyClass* fPtr3 = new(&x[0]) MyClass;
fPtr3->~MyClass(); // Requires explicit destructor call
// no delete because x is on the stack
}
operator new[]
Fungsi alokasi yang dipanggil oleh ekspresi baru untuk mengalokasikan penyimpanan untuk array objek.
void* operator new[](std::size_t count);
void* operator new[](std::size_t count, const std::nothrow_t&) noexcept;
void* operator new[](std::size_t count, void* ptr) noexcept;
Parameter
count
Jumlah byte penyimpanan yang akan dialokasikan untuk objek array.
ptr
Penunjuk yang akan dikembalikan.
Nilai hasil
Penunjuk ke alamat byte terendah dari penyimpanan yang baru dialokasikan. Atau ptr
, saat formulir ketiga digunakan.
Keterangan
Fungsi pertama dipanggil oleh new[]
ekspresi untuk mengalokasikan count
byte penyimpanan yang cocok diselaraskan untuk mewakili objek array dengan ukuran tersebut atau lebih kecil. Program dapat menentukan fungsi dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++. Perilaku yang diperlukan sama dengan untuk operator new
. Perilaku default adalah mengembalikan operator new( count )
jika berhasil. Jika tidak, itu melemparkan std::bad_alloc
pengecualian (atau pengecualian yang berasal dari std::bad_alloc
). Untuk membebaskan penyimpanan yang dialokasikan oleh bentuk ini, operator new[]
panggil operator delete[]
.
Fungsi kedua dipanggil oleh ekspresi penempatan new[]
untuk mengalokasikan count
byte penyimpanan yang cocok diselaraskan untuk mewakili objek array dengan ukuran tersebut. Program dapat menentukan fungsi dengan tanda tangan fungsi ini yang menggantikan versi default yang ditentukan oleh Pustaka Standar C++. Perilaku default adalah mengembalikan operator new( count )
jika fungsi tersebut berhasil. Jika tidak, ia kembali nullptr
. Untuk membebaskan penyimpanan yang dialokasikan oleh bentuk ini, operator new[]
panggil operator delete[]
. Untuk informasi selengkapnya tentang perilaku pelemparan atau non-pelemparan new
, lihat Operator new
dan delete
.
Fungsi ketiga dipanggil oleh ekspresi penempatan new[]
non-alokasi, dari formulir new( ptr ) T[ N ]
. Formulir ini tidak mengalokasikan memori. Ini membangun objek dalam memori yang diteruskan melalui ptr
parameter . Fungsi mengembalikan ptr
. Anda harus memanggil destructor secara eksplisit untuk setiap objek yang dibuat. Anda bertanggung jawab untuk menyediakan memori yang cukup untuk ptr
. Jangan panggil delete[]
pada nilai yang dikembalikan oleh new
ekspresi. Sebagai gantinya, batalkan alokasi ptr
, jika perlu, setelah Anda memanggil destruktor.
Contoh
// new_op_array.cpp
// compile with: /EHsc
#include <new>
#include <iostream>
using namespace std;
class MyClass {
int member{ 0 };
public:
MyClass() {
cout << "MyClass at 0x" << this << " constructed.\n";
};
~MyClass() {
cout << "MyClass at 0x" << this << " destroyed.\n";
};
};
int main() {
// The first form of array new / delete
MyClass* fPtr1 = new MyClass[2];
delete[] fPtr1;
// The second form (fail returns nullptr) of array new / delete
MyClass* fPtr2 = new(nothrow) MyClass[2];
if (fPtr2)
delete[] fPtr2;
// The third form (non-allocating placement) of array new / delete
char x[2 * sizeof(MyClass) + sizeof(int)]; // x is automatic
MyClass* fPtr3 = new(&x[0]) MyClass[2];
fPtr3[1].~MyClass(); // Requires explicit destructor calls
fPtr3[0].~MyClass(); // Recommended in reverse construction order
// Don't delete[] fPtr3 here.
// delete[] &x[0] not required because x is on the stack
}