Genel olarak dinamik ayırmaya izin verilmeyen ve istisnalara izin verilmeyen güvenlik yazılımını göz önünde bulundurun. Dinamik ayırma, yalnızca sınıf açıklığı, operatör new
ve delete
'u tanımladığında kullanılabilir. Başkaları sınıfı için operatör new
'u kullanarak derleme başarısızlığına neden olabilir. Bir yandan standart kütüphane ile bu neden yan etkileriKüresel operatör olmadan çıplak metal yeni
void* operator new(std::size_t) = delete;
:
anlatılan durumda derleme yetmezliğine neden en basit yolu, küresel yeni operatörünü kaldırmaktır. Örneğin, <array>
dahil, <stdexcept>
tarafından <new_allocator>
'a dahil edilir. <new_allocator>
, ::new
operatörünü kullanır ve bu durum, istisna ve bellek ayırma kullanmak istemediğinizde bile oluşturma başarısız olur. Scoot Meyers'e göre <array>
çıplak metal dostudur. derleyici ile
bu neden hata yerleşik operatör
src/main.cpp:91:31: error: deleted definition of 'void* operator new(std::size_t)'
void* operator new(std::size_t) = delete; ^
<built-in>: note: previous declaration of 'void* operator new(std::size_t)'
::new
yasaklama ve <array>
kullanmak için herhangi bir çözüm var mı?
::new
numaralı telefon numarasından genel numaralı telefonu yasaklamak için herhangi bir çözüm var mı? Ne olursa olsun Kullandığınız programlama dili
Bağlantı süresinde biraz daha sonra oluşan bir hata ile tamam mısınız? –
@Marc Yapıyı hiç engelleyemeyen herhangi bir çözümle birlikte iyiyim. –
Bazen C için iyi sebepler vardır. Bu onlardan biri gibi geliyor. C gizli ek yük oluşturmaz. "yeni" tek sorun değildir, ancak bozulma da sorunlara yol açabilir, örn. kesme işleyicileri ve diğer zaman kritik yolları için. – Olaf