Yeni char aslında bir sınıf türü için uyumlu bellek garanti ediyor mu?
Olur ayrılırken bir tampon) new char[sizeof(T)]
garantili için bellek ayrılamadı hangisi düzgün hizalanmış türü T
, üyeler T
onların doğal, uygulama tanımlı, hizalama (yani, değil kullanılan alignas
sözcüğü değiştirmek için hizalama).
Bu garanti cevapları yapımı burada gördüm ama tamamen standart garanti geldiğinde nasıl emin değilim. Standart 5.3.4-10 temel gereksinimi verir: aslında new char[]
max_align_t
aynı hizada olmalıdır.
Ne kaçırıyorum alignof(T)
max_align_t
en büyük değeri geçerli bir uyum olacağını söylüyor. Gayet açık bence, ama bir yapı ortaya hizalama max_align_t
en olmalı? Hatta nokta 3.11-3 diyor doğrultma işlemi desteklenmiyor olabilir genişletilmiş, böylece derleyici bir sınıf içinde hizalı bir türüdür kendi başına karar verebilir mi?
CEVAP
Ä°fadeler new char[N]
new unsigned char[N]
garantili
bellek yeterince herhangi bir nesne için uyumlu geri dönmek için. §5.3.4/10
"[...] Char ve işaretsiz karakter dizileri için, arasındaki fark
yeni-ifade ve adresi tahsisat tarafından döndürülen sonuç
fonksiyon sıkı temel ayrılmaz bir katı olacaktır
uyum gereksinimi (3.11) büyük hayır olan herhangi bir nesne türü
daha dizinin boyutu yaratılıyor. Ayırma Çünkü [ not:
fonksiyonları depolama işaretçiler iade kabul edilir
uygun temel ile herhangi bir nesne türü için hizalanmış
hizalama, dizi ayırma bu kısıtlamayı havai verir
hangi diğer nesneleri içine ayrılırken karakter dizilerinin yaygın bir deyim
türleri sonra alınacaktır. —son not ]".
İstediğin raw ayırmak için ise elbette bakış biçimsel bir işaret:
bellek, daha net söyleyebiliriz: operator new(N)
. Kavramsal olarak,
new char[N]
; N
char
15* * N
bayt ayırır oluşturur.
Bu ne anlama geliyor? &;'NSUnknow...
Nasıl jenerik T türü bir sınıf örneği ...
() süper yükseltir "eğer data: tü...
Oluşturulmuş Bir Sistem Başarılı.Bir Y...
Nasıl yeni C için Visual Studio şablon...