SORU
19 Ocak 2009, PAZARTESİ


Yerleşik tür yıkıcı (int, char vs..)

C aşağıdaki kodu derleyici bir hata veriyor:

void destruct1 (int * item)
{
  item->~int();
}

Bu kod neredeyse aynıdır, sadece başka bir türü için typedef int ve bir şey sihirli olur:

typedef int myint;

void destruct2 (myint * item)
{
  item->~myint();
}

Neden ikinci kod çalışıyor mu? Bir int typedefed olmuştur diye bir yıkıcı olur mu?

Kimse bunu yapmak istiyor neden merak ediyorsun durumda: Bu C kodunu yeniden düzenleme geliyor. Standart yığın kaldırma ve selfmade havuzları ile yenileyeceğiz. Bu bizim yerleştirme-yeni ve yıkıcılar aramayı gerektirir. İlkel türler için yıkıcı araman işe yaramaz olduğunu biliyorum, ama biz gerçek sınıfları ile daha sonra yerine Bakla durumda kod yine de onları istiyoruz.

Çıplak int ama typedefed olanları mı işe yaramazsa bulmak oldukça sürpriz oldu.

Btw - şablon-fonksiyonları içeren bir çözüm buldum. Biz sadece şablon içinde typedef ve her şey yolunda.

CEVAP
19 Ocak 2009, PAZARTESİ


Kodunuzu genel parametreleri için iş yapar bu yüzden. Kap " C " göz önünde bulundurun:

template<typename T>
struct C {
    // ...
    ~C() {
        for(size_t i = 0; i<elements; i  )
            buffer[i].~T();
    }
};

Yerleşik türleri için özel durumlar tanıtmak için çok can sıkıcı olmalı. C T int eşit olursa bile yukarıdaki almasını sağlar. Kutsal Standart 12.4 p15 diyor ki:

Bir yıkıcı için açık çağrı gösterimde herhangi bir skaler türü adı için kullanılabilir. Bu izin, mümkünse bir yıkıcı belirli bir tip varsa bilmek zorunda kalmadan kod yazmak için yapar.

Düz bir int ve çiğnenmiş bir typedef int kullanmak arasındaki fark sözdizimsel olarak farklı şeyler olmasıdır. Kural yıkıcı bir çağrı, ~ sonra şey tür adı. int böyle bir şey yok, ama typedef adı. 7.1.5.2 bak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Authority

    Android Auth

    3 NİSAN 2011
  • Autocar

    Autocar

    11 Mart 2006
  • cdgotx

    cdgotx

    8 Kasım 2011