operator new (<new>)
Yeni bir-tek tek nesneler için ayrılacak ifade tarafından çağırılan işlev.
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( );
Parametreler
_Count
Ayrılacak Depolama bayt sayısı._Ptr
Döndürülen işaretçi.
Dönüş Değeri
En düşük bayt adresine yeni ayrılmış depolama için bir işaretçi.Veya_Ptr.
Notlar
İlk işlev ayırmak için yeni bir ifade adlandırılır _Count bayt depolama yeterince hizalanan o boyuttaki herhangi bir nesne temsil eder.Program, standart C++ Kitaplığı tarafından tanımlanan varsayılan sürümünün yerini alır ve bu nedenle değiştirilebilir bu işlev imzası ile diğer bir işlev tanımlayabilirsiniz.
Gerekli istendiği gibi depolama yalnızca yapılamadığı durumlarda bir null işaretçi döndürmek için bir davranıştır.Her bir tahsisat işaretçi depolama ayrık diğer ayrılmış depolama ortamından verir.Contiguity arda çağrılar tarafından ayrılmış depolama ve sırası belirtilmemiş.İlk saklanan değer belirtilmemiş.Döndürülen işaretçi başına ayrılan depolama alanı (en düşük bayt adresine) işaret eder.Döndürülen değer sayısı sıfırsa, işlev tarafından döndürülen herhangi bir değere eşit karşılaştırmaz.
Bir döngü yürütmek için varsayılan davranıştır.Döngü içinde işlevin istenen ayrılacak ilk çalışır.Girişimini bir çağrı içerir mi malloc(size_t) belirsiz olur.Deneme başarılı olursa, işlev ayrılmış depolama için bir işaretçi döndürür.Aksi takdirde, belirtilen işlevini çağırır Yeni işleyicisi.Çağrılan işlev hatalı döndürürse, döngüyü yineler.İstenen depolama ayırma girişimi başarılı olduğunda veya çağrılan işlev değil döndüğünüzde döngüsü sonlanır.
Aşağıdaki işlemlerden birini gerçekleştirmek için gereken yeni bir işleyici davranışını şöyledir:
Daha fazla depolama alanı ayırma için kullanılabilir duruma getirir ve dönün.
Call either abort or exit(int).
Türünde bir nesne bad_alloc.
Varsayılan davranışı bir Yeni işleyicisi türünde bir nesne için bad_alloc.Bir null işaretçi varsayılan yeni işleyiciyi belirtir.
Sipariş ve art arda çağrılar tarafından ayrılmış depolama contiguity operator new(size_t) depolanan başlangıç değerleri olduğu gibi belirtilmezse.
İkinci işlev ayrılacak yerini yeni bir ifade adlandırılır _Count bayt depolama yeterince hizalanan o boyuttaki herhangi bir nesne temsil eder.Program, standart C++ Kitaplığı tarafından tanımlanan varsayılan sürümünün yerini alır ve bu nedenle değiştirilebilir bu işlev imzası ile diğer bir işlev tanımlayabilirsiniz.
Geri dönmek için varsayılan davranışı olan operator new(_Count) bu işlevi başarılı olursa.Aksi halde, boş bir işaretçi döndürür.
Üçüncü işlev yerleşimi adlandırılır Yeni deyim, Yeni (args) T.Burada, args tek bir nesne işaretçisi oluşur.Bu, bilinen bir adreste bir nesne oluşturmak için yararlı olabilir.İşlev _Ptr.
Tarafından ayrılan depolama alanı boşaltmak için operator new, çağrı operatörü silmek.
Oluşturma hakkında bilgi için yeni, bkz: nonthrowing davranışını veya Yeni ve işleçler Sil.
Örnek
// 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;
}
Örnek çıktı
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.0023FC60
Destructing MyClass.0023FC60
The address of x[0] is : 0023FC60
Gereksinimler
Başlık:<yeni>
Ad alanı: std