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
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.
İmzasız bir char nedir?...
Ruby 1.9 - geçersiz boş char (US-ASCII...
Neden boyutu(char)` eğer char standart...
Mod derleme karşı yerleşik karışık ver...
Nasıl char* x eşittir bir dize işaret ...