SORU
14 Mayıs 2012, PAZARTESİ


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
14 Mayıs 2012, PAZARTESİ


İ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 char15* * N bayt ayırır oluşturur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • Google Россия

    Google Ро

    9 Temmuz 2007
  • Marissah Simonini

    Marissah Sim

    25 HAZİRAN 2013