Aracılığıyla paylaş


delete İşleci (C++)

Bellek bloğunu kaldırır.

Sözdizimi

[::] delete atama ifadesi
[::] delete [] atama ifadesi

Açıklamalar

Atama ifadesi bağımsız değişkeni, yeni işleçle oluşturulan bir nesne için daha önce ayrılmış bir bellek bloğuna yönelik bir işaretçi olmalıdır. işlecinin delete türü void bir sonucu vardır ve bu nedenle bir değer döndürmez. Örneğin:

CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;

delete ile new ayrılmamış bir nesnenin işaretçisinde kullanılması öngörülemeyen sonuçlar verir. Ancak, 0 değerine sahip bir işaretçi üzerinde kullanabilirsiniz delete . Bu sağlama, hata durumunda 0 döndürdüğünde new başarısız new bir işlemin sonucunun silinmesinin zararsız olduğu anlamına gelir. Daha fazla bilgi için bkz . Yeni ve silme İşleçleri.

new ve delete işleçleri, diziler de dahil olmak üzere yerleşik türler için de kullanılabilir. Bir diziye başvuruyorsapointer, önüne pointerboş köşeli ayraç ([]) yerleştirin:

int* set = new int[100];
//use set[]
delete [] set;

bir nesne üzerinde delete işlecini kullanmak, belleği serbest bırakır. Nesne silindikten sonra bir işaretçinin başvurusunu kaldıran bir program öngörülemeyen sonuçlara veya çökmeye neden olabilir.

delete C++ sınıf nesnesinin belleğini serbest bırakmak için kullanıldığında, nesnenin belleği serbest bırakılmadan önce nesnenin yıkıcısı çağrılır (nesnenin bir yıkıcısı varsa).

İşlecin işleneni delete değiştirilebilir bir l değeriyse, nesne silindikten sonra değeri tanımlanmamış olur.

/sdl (Ek güvenlik denetimlerini etkinleştir) derleyici seçeneği belirtilirse, işlecin işleneni delete nesne silindikten sonra geçersiz bir değere ayarlanır.

delete Kullanma

Delete işleci için iki söz dizili değişken vardır: biri tek nesneler için, diğeri de nesne dizileri için. Aşağıdaki kod parçası, bunların nasıl farklılık gösterdiğini gösterir:

// expre_Using_delete.cpp
struct UDType
{
};

int main()
{
   // Allocate a user-defined object, UDObject, and an object
   //  of type double on the free store using the
   //  new operator.
   UDType *UDObject = new UDType;
   double *dObject = new double;
   // Delete the two objects.
   delete UDObject;
   delete dObject;
   // Allocate an array of user-defined objects on the
   // free store using the new operator.
   UDType (*UDArr)[7] = new UDType[5][7];
   // Use the array syntax to delete the array of objects.
   delete [] UDArr;
}

Aşağıdaki iki durum tanımsız sonuçlar üretir: bir nesnede delete (delete []) dizi biçimini ve dizideki normal olmayan delete biçimini kullanma.

Örnek

kullanma deleteörnekleri için bkz . yeni işleç.

Silme nasıl çalışır?

delete işleci, işlev işleci silme işlemini çağırır.

Sınıf türünde (sınıf, yapı veya birleşim) olmayan nesneler için genel silme işleci çağrılır. Sınıf türündeki nesneler için, silme ifadesi birli kapsam çözümleme işleci (::) ile başlıyorsa, serbest bırakma işlevinin adı genel kapsamda çözümlenir. Aksi takdirde, delete işleci bellek serbest bırakılmadan önce bir nesne için yıkıcıyı çağırır (işaretçi null değilse). Silme işleci sınıf bazında tanımlanabilir; belirli bir sınıf için böyle bir tanım yoksa, genel işleç silme çağrılır. Delete ifadesi, statik türü sanal yıkıcısı olan bir sınıf nesnesini serbest bırakmak için kullanılırsa, deallocation işlevi nesnenin dinamik türünün sanal yıkıcısı aracılığıyla çözümlenir.

Ayrıca bkz.

Birli İşleçli İfadeler
Anahtar Sözcükler
new ve delete İşleçleri