statik kodu aşağıdaki hata tespit etmek için,
bir yol var TLDR (dökme için işaretçisi operatörü ile) yığın değişken silme çağrı Algılama? Sadece bir kullanıcı tanımlı dönüşüm içeren * geçersiz için Foo bir dönüşüm olmadığı
struct Foo
{
operator const int*()
{
return &data;
}
int data;
};
int main()
{
Foo f;
delete f;
}
, aslında f
üzerinde delete
aramaya izin verilir.
uzun hikaye bizim kod temeli
, pseudocode, serisi kaldırılmaya dizeleri gerçekten aptal yolu vardı
char * buff = bar.loadString();
use buff;
delete buff;
yolu, bir şablon yük işlevine, değiştirildi, şimdi görünüyor serisini
bar.load(m_IntMember);
bar.load(m_StringMember);
ancak tüm oluşumları gibi loadString
ait (birçoğu oldu) Hepimizin insan hatası neden olabilir biliyorum, bu yüzden biraz olmayan kullandığınız beri kod yanlış
string buff;
bar.load(buff);
use buff;
delete buff; //notice the delete
gibi modifiye edilmiş yerler vardır
string buff;
bar.load(buff);
use buff;
: manuel böyle değiştirilmesine vardı string
standart uygulaması aslında silinebilir void*
için dökülebilir bir overloaded const char * operator
... vardır
biz özel yüksek performanslı alloca'yı var (derleme sırasında bu hataların hepsi yakalamak istiyoruz zamanında böylece ları, bu) herhangi bir çalışma zamanı hata olmadan bozuk belleğe kolaydır
o derlemek edemiyor bu yüzden, yoğun olarak kullanılmaz çünkü const char*
geçici olarak string
gelen işleci silmek silemezsiniz kabul küresel delete operatörünü beyan edemez olmadan
ne yapabilirim (hataların belirli miktarda ulaşan zaman msvc derleme durur çünkü bütün hatalardan açıklanan hata "filtre" olamaz)?
Bu ayırt etmek mümkün değildir. Akıllı bir işaretçi kullanın. –
'const char *', 'const' -ess'i kaybettiğinden dolaylı olarak void * 'ye dönüştürülemez. 'Const void * 'öğesine dolaylı olarak dönüştürülebilir, ancak bu' delete 'için yasal bir argüman olmamalıdır. Açıkça bir yere mi dökülüyorsun? Ürün iadesinin 'const int * için örnek değiştirdiğinizde ona @jamesdlin – jamesdlin
iyi derler' Ben delete' 'hakkında yanlış değilim, Ah http://ideone.com/aL23m2 – relaxxx