$1.99 Domains* at GoDaddy.com

C++ Programlama delete OPERATÖRÜ

cders-135Delete operatöürü new operatörüyle tahsis edilmiş olan blokları serbest bırakmak için kullanılır. Genel biçimi:

 

1.      delete p;

2.      delete [] p;

 

Eğer tahsisat tek parça olarak yapılmışsa yani köşeli parantez kullanılmadan yapılmışsa silme işlemi köşeli parantez kullanılmadan yapılmalıdır. Örneğin:

 

int *p;

p = new int;

delete p;

 

Eğer tahsisat işlemi birden fazla eleman için yapılmışsa yani köşeli parantez kullanılarak yapılmışsa serbest bırakma işleminde de köşeli parantez kullanılmalıdır. Örneğin:

 

int *p;

p = new int[n];

delete [] p;

 

Burada köşeli parantez içerisine bir şey yazılmaz. delete operatörü unary prefix bir operatördür ve öncelik tablosunun ikinci düzeyinde bulunur.

 

delete p + 1; /*Hatalı*/

delete (p + 1);/*DoÄŸru*/

 

Delete operatörünün operandı daha önce tahsis edilmiş olan bloğun başlangıç adresi olmalıdır.  Değilse beklenmeyen sonuçlar ortaya çıkabilir. Tabii derleici delete operatörüne karşılık amaç koda (object module’e) free gibi tahsis edilmiş bloğu serbest bırakan bir fonksiyon kodu yerleştirmektedir. new delete operatörlerinin tahsisat işlemlerinde kullandığı fonksiyon maloc, calloc, free fonksiyonları olmak zorunda değildir. Bu iki grup fonksiyon farklı tahsisat tabloları kullanıyor olabilir. Bu nedenle new delete operatörleriyle malloc, calloc, free gibi standart C fonksiyonlarını özel bir durum yoksa birlikte kullanmamak gerekir. Çünkü bir grup tarafından tahsis edilen alan diğer grup tarafından tahsis edilmemiş gibi gözükebilir.

 

Görüldüğü gibi C++’ta realloc fonksiyonun karşılığı bir operatör yoktur. Ancak böyle bir fonksiyon yazılabilir.

 

/*————realloc.cpp—————*/

void *Realloc(void *ptr, size_t newsize, size_t oldsize) /*size_t àunsigned int*/

{

            void temp;

 

            temp = new char [newsize];

            memcpy(temp, ptr, oldsize);

            delete [] ptr;

            return temp;

}

/*—————————————-*/

 

 

Kullanımı:

p = new char [10];                  /*         10 * sizeof(char) kadar bellek tahsis edildi               */

p = Realloc(p, 20, 10);           /*         Tahsis edilmiş alan 20 * sizeof(char)’e büyütüldü    */

Kategoriler: C++ Programlama, Yazılım

Tags: , ,

Yorumlar

Yorum Yok

Yorumunuzu Ekleyin

Yorum eklemek için giris yapmalısınız.