Aracılığıyla paylaş


Operatör yeni işlev

Bir deyimi aşağıdaki gibi bir programda karşılaşıldığında, işlevine bir çağrı çeviren operator new:

Notlar

char *pch = new char[BUFFER_SIZE];

İstek için depolama, sıfır bayt ise Yeni işleç farklı bir nesneye bir işaretçi döndürür (yani yinelenen aramalar için Yeni işleç farklı işaretçiler dönmek). Yetersiz bellek ayırma isteği için ise Yeni işleç verir null ya da bir istisna atar (bkz: Yeni ve işleçler silmek daha fazla bilgi için).

Bellek boşaltın ve yeniden ayırma girişiminde bir yordam yazabilirsiniz; Bkz: _set_new_handler daha fazla bilgi için. Kurtarma düzeni üzerinde daha fazla ayrıntı görmek için aşağıdaki konuya İşleme yetersiz bellek koþullarý.

İki kapsamları için operator new işlevleri aşağıdaki tabloda açıklanmıştır.

Kapsam işleci için yeni işlevler

İşleç

Kapsam

:: yeni işleç

Genel

Sınıf adı:: işleci yeni

Sınıf

İlk bağımsız değişken için Yeni işleç türünde olmalıdır size_t (stddef içinde tanımlanan bir türü.h) ve dönüş türü ise her zaman void *.

Genel Yeni işleç işlevini ne zaman verilir Yeni işleci yerleşik türdeki nesnelerin tahsis etmek için kullanılır, içermeyen nesne sınıfı türü kullanıcı tanımlı Yeni işleç işlevleri ve her türlü dizileri. Zaman Yeni işleci, nesne sınıfı türü ayırmak için kullanılır burada bir Yeni işleç tanımlanır, bileşenin Yeni işleç olarak adlandırılır.

Bir Yeni işleç bir sınıf genel gizleyen (Bu nedenle, sanal olamaz) bir durağan üye işlevi için tanımlanan işlev Yeni işleç işlev sınıf türü nesneler için. Durumu düşünün nerede Yeni ayırır ve bellek belirli bir değeri ayarlamak için kullanılır:

// spec1_the_operator_new_function1.cpp
#include <malloc.h>
#include <memory.h>

class Blanks
{
public:
    Blanks(){}
    void *operator new( size_t stAllocateBlock, char chInit );
};
void *Blanks::operator new( size_t stAllocateBlock, char chInit )
{
    void *pvTemp = malloc( stAllocateBlock );
    if( pvTemp != 0 )
        memset( pvTemp, chInit, stAllocateBlock );
    return pvTemp;
}
// For discrete objects of type Blanks, the global operator new function
// is hidden. Therefore, the following code allocates an object of type
// Blanks and initializes it to 0xa5
int main()
{
   Blanks *a5 = new(0xa5) Blanks;
   return a5 != 0;
}

İçin parantez içinde sağlanan bağımsız değişken Yeni için geçirilen Blanks::operator new olarak chInit bağımsız değişkeni. Ancak, genel Yeni işleç işlevi gizli, neden bir hata üretmek için aşağıdaki gibi bir kod:

Blanks *SomeBlanks = new Blanks;

Visual C++ 5.0 ve önceki sürümlerde, nonclass türleri ve tüm diziler (, önceki mi olsun sınıfı türü) kullanılarak ayrılmış Yeni işleci her zaman kullanılan genel Yeni işleç işlevi.

Visual C++ 5.0 ile başlayarak, derleyici dizi üyesi destekleyen Yeni ve silmek Sınıf bildirimindeki operators. Örne?in:

// spec1_the_operator_new_function2.cpp
class MyClass
{
public:
   void * operator new[] (size_t)
   {
      return 0;
   }
   void   operator delete[] (void*)
   {
   }
};

int main() 
{
   MyClass *pMyClass = new MyClass[5];
   delete [] pMyClass;
}

Ayrıca bkz.

Başvuru

işleç silme işlevi

Yeni işleç (C++)

delete operatörü (C++)