> > On 2008-09-12 at 15:13:24 [+0200], Fredrik Modéen <fredrik@xxxxxxxxx> > wrote: >> >> > On Fri, 12 Sep 2008 13:56:21 +0200 (CEST), Fredrik Modéen wrote >> >> this are how it's setup to work, it's only part of it but it showas >> what >> >> i'm talkning about. >> >> >> >> ... >> >> >> >> void >> >> IconView::_SetIcon(BBitmap* mini) >> >> { >> >> BAppFileInfo info(); >> >> if (mini != NULL || force) >> >> info.SetIconForType(fType.Type(), mini, B_MINI_ICON); >> >> } >> > >> > In that case you would just track down what SetIconForType() does. If >> it >> > copies the bitmap, then you're fine. Otherwise this is probably a >> false >> > positive. >> > >> > It seems that you are not subscribed to the commits mailing list. >> Please >> > make >> > sure you are subscribed, as we are sometimes replying to commits there >> > like I >> > did for your change in r27438: >> Ah yes in deed I need to subscribe to that list (done now..) >> >> > >> > https://lists.berlios.de/pipermail/haiku-commits/2008-September/016893.html >> > >> > You make the same assumption that new cannot fail in r27448 which I >> find a >> > bad >> > idea. You could say that it is true that new cannot return NULL, since >> it >> > should actually throw an error and not return NULL. However this is >> not a >> > reason to strip the NULL checks, but to make new into >> new(std::nothrow) >> > which >> > actually returns NULL on a failed allocation (which can always >> happen). I >> > thought we had the general consensus that we use new(std::nothrow) and >> > always >> > check the result, but I'm not sure how the other see it. >> >> So it would be better to try to make a new new when I found a null like >> this >> >> if (_fDevice == NULL) >> _fDevice = new BList(); >> >> if(_fDevice != NULL){ >> continue.. >> } >> >> or some thing similar. > > Nope, what Michael is referring to is, that you should never use the new > operator like this: > > Foo* x = new Foo(...); > x->DoSomething(); > > Because this operator version will throw an exception when the memory > cannot > be allocated. Instead use the nothrow version and check the result > explicitly: > > Foo* x = new(std::nothrow) Foo(...); > if (x == NULL) > return B_NO_MEMORY; > > x->DoSomething(); If I only had read this a little earlier :) could we some how hide the other (old) new or replace this with new(std::nothrow) and state that in Haiku are new == new(std::nothrow) but you cant see this and you don't need to think about this only use new as we did before? > > CU, Ingo > > -- MVH Fredrik Modéen