Olası Çoğalt:Yeni operatör NULL döndürecek mi?
Will new return NULL in any case?
Car *newcar = new Car();
if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
{
}
Olası Çoğalt:Yeni operatör NULL döndürecek mi?
Will new return NULL in any case?
Car *newcar = new Car();
if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
{
}
oluşturmak varsayalım. new
'un normal formu hiçbir zaman NULL
; ayırma başarısız olursa, std::bad_alloc
istisnası atılır (new (nothrow)
formu istisnalar atmaz ve ayırma başarısız olursa NULL
döndürür). (Dil standardize önce yayımlanan özellikle) ya da istisnalar açıkça (örneğin, gömülü sistemler için belki bazı derleyiciler), new
başarısızlık üzerine NULL
döndürebilir devre dışıdır durumlarda bazı eski C++ derleyici üzerinde
. Bunu yapan derleyiciler C++ standardına uymuyor.
Kesinlikle! C++ içinde yapmanın yolu, try/catch bloklarıdır. İşte bir örnek: http://www.cplusplus.com/reference/std/new/bad_alloc/ – karlphillip
Varsayılan olarak, C++, yeni işleç başarısız olduğunda bir std :: bad_alloc istisnası atar. Bu nedenle, istisna kullanımını açıkça devre dışı bırakmadıkça, NULL denetimi gerekli değildir. Atama hatası nedeniyle Hayır, new
, std::bad_alloc
atar.
... ve istisna kullanımını devre dışı bırakırsanız, dil artık C++ değildir. –
Hayır. İstisnalar istemiyorsanız, bunun yerine new(std::nothrow) Car
kullanın.
Bunu birçok kez gördüm ve neden yeni bir bellek istisnası atacağınızı merak ettim. Sanırım C'de çalışmakta olan ve şimdi C++ olan geliştiricilerden geliyor. arasında
Dünyada ne demek istiyorsun? C'ye bir istisna atmadı, ve bunlardan hiçbiri eğer ne düşündüğünüzün mantıklı olduğundan emin değilim. – Chuck
"Boşluğun kontrol edilmesi," demek istediğini düşünüyorum. –
"boşluğun denetlenmesi", yaygın bir tıkanıklık refleksinin, VC6 programcının o anda "yeni" nin uygulanmasının sebebi, NULL'in geri dönüşünün mantıklı bir şey olduğuna karar verdi. Belki malloc bunu yaptı ve yeni beri malloc ... –
Yinelenen [Will her durumda yeni dönüş NULL?] (http://stackoverflow.com/questions/550451/will-new-return-null-in-any-case) –