Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 pointer
boş 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