<new>
işleçler ve sabit listeleri
enum align_val_t
enum class align_val_t : size_t {};
operator delete
Tek tek nesneler için depolamayı serbest bırakmak için bir delete
ifade tarafından çağrılan işlev.
void operator delete(void* ptr) noexcept;
void operator delete(void *, void*) noexcept;
void operator delete(void* ptr, const std::nothrow_t&) noexcept;
Parametreler
ptr
Değeri silme işlemiyle geçersiz olarak işlenecek olan işaretçi.
Açıklamalar
İlk işlev, geçersiz değerini işlemek için bir delete
ifade tarafından çağrılır ptr
. Program, C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan bu işlev imzasıyla bir işlev tanımlayabilir. Gerekli davranış, önceki bir çağrısı tarafından döndürülen veya değerini ptr
nullptr
kabul etmektir operator new
.
içindeki ptr
bir nullptr
değerin varsayılan davranışı hiçbir şey yapmamaktır. diğer herhangi bir değeri ptr
, daha önce açıklandığı gibi bir çağrı tarafından daha önce döndürülen bir new
değer olmalıdır. null olmayan bir değeri ptr
için varsayılan davranış, önceki çağrı tarafından ayrılan depolama alanını geri kazanmaktır. Bu tür geri kazanılmış depolamanın bir parçasının veya tamamının, sonraki bir çağrısı operator new
veya herhangi calloc
bir , malloc
realloc
veya işlevi tarafından hangi koşullar altında ayrıldığı belirtilmez.
İkinci işlev, formunun new( std::size_t )
ifadesine karşılık gelen bir new
yerleştirme delete
ifadesi tarafından çağrılır. Hiçbir şey yapmaz.
Üçüncü işlev, formunun new( std::size_t, const std::nothrow_t& )
ifadesine karşılık gelen bir new
yerleştirme delete
ifadesi tarafından çağrılır. Program, C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan bu işlev imzasıyla bir işlev tanımlayabilir. Gerekli davranış, önceki bir çağrısı tarafından döndürülen veya değerini ptr
nullptr
kabul etmektir operator new
. Varsayılan davranış, değerini değerlendirmektir delete( ptr )
.
Örnek
kullanan operator delete
bir örnek için bkzoperator new
. .
operator delete[]
Bir nesne dizisi için depolamayı serbest bırakmak için bir ifade tarafından delete
çağrılan işlev.
void operator delete[](void* ptr) noexcept;
void operator delete[](void *, void*) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&) noexcept;
Parametreler
ptr
Değeri silme işlemiyle geçersiz olarak işlenecek olan işaretçi.
Açıklamalar
İlk işlev, geçersiz değerini işlemek için bir delete[]
ifade tarafından çağrılır ptr
. Program bu işlev imzası ile C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan bir işlev tanımlayabildiği için işlev değiştirilebilir. Gerekli davranış, önceki bir çağrısı tarafından döndürülen veya değerini ptr
nullptr
kabul etmektir operator new[]
. null değeri ptr
için varsayılan davranış hiçbir şey yapmamaktır. diğer herhangi bir değeri ptr
, daha önce açıklandığı gibi bir çağrı tarafından daha önce döndürülen bir değer olmalıdır. böyle bir null olmayan değeri ptr
için varsayılan davranış, önceki çağrı tarafından ayrılan depolamayı geri kazanmaktır. Bu tür geri kazanılmış depolamanın bir parçasının veya tamamının, sonraki bir çağrısı operator new
veya herhangi calloc
bir , malloc
realloc
veya işlevi tarafından hangi koşullar altında ayrıldığı belirtilmez.
İkinci işlev, formunun new[]( std::size_t )
ifadesine karşılık gelen bir new[]
yerleştirme delete[]
ifadesi tarafından çağrılır. Hiçbir şey yapmaz.
Üçüncü işlev, formunun new[]( std::size_t, const std::nothrow_t& )
ifadesine karşılık gelen bir new[]
yerleştirme delete[]
ifadesi tarafından çağrılır. Program, C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan bu işlev imzasıyla bir işlev tanımlayabilir. Gerekli davranış, işlecine ptr
nullptr
new[]
yapılan önceki bir çağrı tarafından döndürülen veya değerini kabul etmektir. Varsayılan davranış, değerini değerlendirmektir delete[]( ptr )
.
Örnek
kullanımına operator delete[]
ilişkin örnekler için bkzoperator new[]
. .
operator new
Tek tek nesneler için depolama ayırmak için new-expression tarafından çağrılan işlev.
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;
Parametreler
count
Ayrılacak depolama bayt sayısı.
ptr
Döndürülecek işaretçi.
Dönüş değeri
Yeni ayrılan depolama alanının en düşük bayt adresinin işaretçisi. veya ptr
işlevinin üçüncü biçimini kullanıyorsanız.
Açıklamalar
İlk işlev, bu boyuttaki herhangi bir nesneyi temsil etmek üzere uygun şekilde hizalanmış depolama baytlarını ayırmak count
için bir new
ifade tarafından çağrılır. Bu işlev değiştirilebilir. Bu, programın bu işlev imzası ile C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan alternatif bir işlev tanımlayabileceği anlamına gelir.
Gerekli davranış, yalnızca depolama istendiği gibi ayrılabiliyorsa null olmayan bir işaretçi döndürmektir. Bu tür ayırmaların her biri, ayrılan diğer depolama alanından ayrı depolamaya yönelik bir işaretçi verir. Ardışık çağrılar tarafından ayrılan depolamanın sırası ve bitişikliği belirtilmemiştir. İlk depolanan değer belirtilmemiş. Döndürülen işaretçi, ayrılan depolama alanının başlangıcını (en düşük bayt adresi) gösterir. Sıfır ise count
, döndürülen değer işlevi tarafından döndürülen diğer değerlerle eşit değildir.
Varsayılan davranış bir döngü yürütmektir. döngü içinde işlev ilk olarak istenen depolamayı ayırmayı dener. Denemenin çağrısı malloc
gerekip gerekmediği belirtilmemiştir. Ayırma girişimi başarılı olursa, işlev ayrılan depolamaya bir işaretçi döndürür. Aksi takdirde, işlev türündeki new_handler
belirlenmiş işlevi çağırır. Çağrılan işlev döndürürse döngü yineler. İstenen depolamayı ayırma girişimi başarılı olduğunda veya çağrılan bir işlev geri dönmediğinde döngü sonlandırılır.
Türünde new_handler
bir işlevin gerekli davranışı aşağıdaki işlemlerden birini gerçekleştirmektir:
Daha fazla depolama alanını ayırma için kullanılabilir hale getirin ve geri dönün.
abort
veyaexit
öğesini arayın.türünde
bad_alloc
bir nesne atın.
bir işlevin new_handler
varsayılan davranışı türünde bad_alloc
bir nesne oluşturmaktır. Varsayılan nullptr
işlevi bir değer belirlir new_handler
.
ardışık çağrılar operator new
tarafından ayrılan depolamanın sırası ve bitişikliği, burada depolanan ilk değerler gibi belirtilmez.
İlk biçimi tarafından ayrılan depolama alanını boşaltmak operator new
için öğesini çağırın operator delete
.
İkinci işlev, bu boyuttaki herhangi bir nesneyi temsil etmek üzere uygun şekilde hizalanmış depolama baytlarını ayırmak count
için bir yerleştirme new
ifadesi tarafından çağrılır. Bu işlev değiştirilebilir. Bu, programın bu işlev imzası ile C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan alternatif bir işlev tanımlayabileceği anlamına gelir.
Varsayılan davranış, bu işlevin başarılı olması durumunda döndürülmesidir operator new( count )
. Aksi takdirde döndürür nullptr
.
İkinci biçimi (yani döndürmediysenullptr
) tarafından ayrılan depolama alanını operator new
boşaltmak için öğesini çağırınoperator delete
.
Üçüncü işlev, formunun new ( ptr ) T
ayırmayan yerleştirme new
ifadesi tarafından çağrılır. Burada, ptr
tek bir nesne işaretçisi oluşur. Bilinen bir adreste nesne oluşturmak için yararlı olabilir. işlevi döndürür ptr
. Bu nesnede yıkıcıyı açıkça çağırmanız gerekir.
Ayırmayan yerleştirmeyi new
çağırırsanız, çağrısı delete
yapmayın. Bunun yerine, nesne için yıkıcıyı çağırdıktan sonra, sağladığınız bellek için deallocator'ı çağırın.
oluşturma veya oluşturmama davranışı new
hakkında bilgi için bkznew
. ve delete
işleçleri.
Örnek
// 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[]
Bir nesne dizisi için depolama ayırmak için yeni bir ifade tarafından çağrılan ayırma işlevi.
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;
Parametreler
count
Dizi nesnesi için ayrılacak depolama bayt sayısı.
ptr
Döndürülecek işaretçi.
Dönüş değeri
Yeni ayrılan depolama alanının en düşük bayt adresinin işaretçisi. Veya ptr
üçüncü form kullanıldığında.
Açıklamalar
İlk işlev, bu boyutta veya daha küçük herhangi bir dizi nesnesini temsil etmek üzere uygun şekilde hizalanmış depolama baytlarını ayırmak count
için bir new[]
ifade tarafından çağrılır. Program, C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan bu işlev imzasıyla bir işlev tanımlayabilir. Gerekli davranış ile operator new
aynıdır. Varsayılan davranış, başarılı olursa geri dönmektir operator new( count )
. Aksi takdirde, bir std::bad_alloc
özel durum (veya 'den std::bad_alloc
türetilen bir özel durum) oluşturur. Bu biçimiyle ayrılan depolama alanını boşaltmak operator new[]
için öğesini çağırın operator delete[]
.
İkinci işlev, bu boyuttaki herhangi bir dizi nesnesini temsil etmek üzere uygun şekilde hizalanmış depolama baytlarını ayırmak count
için bir yerleştirme new[]
ifadesi tarafından çağrılır. Program, C++ Standart Kitaplığı tarafından tanımlanan varsayılan sürümün yerini alan bu işlev imzasıyla bir işlev tanımlayabilir. Varsayılan davranış, bu işlevin başarılı olması durumunda döndürülmesidir operator new( count )
. Aksi takdirde döndürür nullptr
. Bu biçimiyle ayrılan depolama alanını boşaltmak operator new[]
için öğesini çağırın operator delete[]
. oluşturma veya oluşturmama davranışı new
hakkında daha fazla bilgi için bkznew
. ve delete
işleçleri.
Üçüncü işlev, formunun new( ptr ) T[ N ]
ayırmayan yerleştirme new[]
ifadesi tarafından çağrılır. Bu form bellek ayırmaz. parametresi aracılığıyla ptr
geçirilen bellekteki nesneleri oluşturur. işlevi döndürür ptr
. Oluşturulan her nesne için yıkıcıyı açıkça çağırmanız gerekir. için yeterli bellek sağlamak sizin sorumluluğundadır ptr
. İfade tarafından döndürülen değerde new
çağırmayındelete[]
. Bunun yerine, ptr
gerekirse, yıkıcıları çağırdıktan sonra serbest bırakabilirsiniz.
Örnek
// 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
}