From: Michal H. <ms...@gm...> - 2009-07-22 13:13:36
|
Hi Jozo, I am just writing some code and need to add an existing property to an array. I am wondering why does this interface takes IProperty& rather than shared_ptr<IProperty> as the value parameter? -- Michal Hocko |
From: Jozef M. <mis...@ho...> - 2009-07-22 14:06:53
|
---------------------------------------- > Date: Wed, 22 Jul 2009 15:13:30 +0200 > From: ms...@gm... > To: mis...@ho... > CC: pdf...@li... > Subject: why {CArray,CDict}::addProperty doesn't take shared_ptr > > Hi Jozo, > I am just writing some code and need to add an existing property to an > array. I am wondering why does this interface takes IProperty& rather > than shared_ptr as the value parameter? the question is, why should it take a ptr? /jozo > > -- > Michal Hocko _________________________________________________________________ Windows Live™ Hotmail®: Celebrate the moment with your favorite sports pics. Check it out. http://www.windowslive.com/Online/Hotmail/Campaign/QuickAdd?ocid=TXT_TAGLM_WL_QA_HM_sports_photos_072009&cat=sports |
From: Michal H. <ms...@gm...> - 2009-07-22 14:22:08
|
On Wed, Jul 22, 2009 at 02:06:48PM +0000, Jozef Misutka wrote: > > > > ---------------------------------------- > > Date: Wed, 22 Jul 2009 15:13:30 +0200 > > From: ms...@gm... > > To: mis...@ho... > > CC: pdf...@li... > > Subject: why {CArray,CDict}::addProperty doesn't take shared_ptr > > > > Hi Jozo, > > I am just writing some code and need to add an existing property to an > > array. I am wondering why does this interface takes IProperty& rather > > than shared_ptr as the value parameter? > > the question is, why should it take a ptr? Because we are working with the ptr everywher? Consider simple example: shared_ptr<CArray> array; I would like: array->addProperty(differentArray->getProperty(1)); I have to: array->addProperty(*differentArray->getProperty(1)); or consider new element adding array->addProperty(*shared_ptr<IProperty>(CStringFactory::getInstance())); This sounds little bit asymmetric and I don't see any reason for it. This question is not a call for change, I just don't understand it. Maybe we should reconsider during API cleanup? > > /jozo > > > > > -- > > Michal Hocko -- Michal Hocko |
From: Jozef M. <mis...@ho...> - 2009-07-22 17:54:07
|
----------------------------------------> Date: Wed, 22 Jul 2009 16:22:01 +0200> From: ms...@gm...> To: mis...@ho...> CC: pdf...@li...> Subject: Re: why {CArray,CDict}::addProperty doesn't take shared_ptr>> On Wed, Jul 22, 2009 at 02:06:48PM +0000, Jozef Misutka wrote:>>>>>>>> ---------------------------------------->>> Date: Wed, 22 Jul 2009 15:13:30 +0200>>> From: ms...@gm...>>> To: mis...@ho...>>> CC: pdf...@li...>>> Subject: why {CArray,CDict}::addProperty doesn't take shared_ptr>>>>>> Hi Jozo,>>> I am just writing some code and need to add an existing property to an>>> array. I am wondering why does this interface takes IProperty& rather>>> than shared_ptr as the value parameter?>>>> the question is, why should it take a ptr?>> Because we are working with the ptr everywher? Consider simple example:there is basic rule i adhere to and that is use & instead of ptr when the value must exist. you add complexity otherwise.>> shared_ptr array;>> I would like:> array->addProperty(differentArray->getProperty(1));>> I have to:> array->addProperty(*differentArray->getProperty(1));in yours i can do invalid things likearray->addProperty(shared_ptr());>> or consider new element adding> array->addProperty(*shared_ptr(CStringFactory::getInstance()));array->addProperty(CString());/jozo>> This sounds little bit asymmetric and I don't see any reason for it.> This question is not a call for change, I just don't understand it.> Maybe we should reconsider during API cleanup?>>>>> /jozo>>>>>>>> -->>> Michal Hocko>> --> Michal Hocko _________________________________________________________________ Windows Live™ Hotmail®: Search, add, and share the web’s latest sports videos. Check it out. http://www.windowslive.com/Online/Hotmail/Campaign/QuickAdd?ocid=TXT_TAGLM_WL_QA_HM_sports_videos_072009&cat=sports |
From: Jozef M. <mis...@ho...> - 2009-07-22 20:11:17
|
---------------------------------------- > Date: Wed, 22 Jul 2009 16:22:01 +0200 > From: ms...@gm... > To: mis...@ho... > CC: pdf...@li... > Subject: Re: why {CArray,CDict}::addProperty doesn't take shared_ptr > > On Wed, Jul 22, 2009 at 02:06:48PM +0000, Jozef Misutka wrote: >> >> >> >> ---------------------------------------- >>> Date: Wed, 22 Jul 2009 15:13:30 +0200 >>> From: ms...@gm... >>> To: mis...@ho... >>> CC: pdf...@li... >>> Subject: why {CArray,CDict}::addProperty doesn't take shared_ptr >>> >>> Hi Jozo, >>> I am just writing some code and need to add an existing property to an >>> array. I am wondering why does this interface takes IProperty& rather >>> than shared_ptr as the value parameter? >> >> the question is, why should it take a ptr? > > Because we are working with the ptr everywher? Consider simple example: sorry for the mess in my emails. sending it once again. i use a fair simple an intuitive rule: where you expect a valid instance use &, otherwise *. you avoid many complex checks and problems. in you proposal you could write array->addProperty(shared_ptr()); > > shared_ptr array; > > I would like: > array->addProperty(differentArray->getProperty(1)); > > I have to: > array->addProperty(*differentArray->getProperty(1)); > > or consider new element adding > array->addProperty(*shared_ptr(CStringFactory::getInstance())); array->addProperty(CString()); /jozo > > This sounds little bit asymmetric and I don't see any reason for it. > This question is not a call for change, I just don't understand it. > Maybe we should reconsider during API cleanup? > >> >> /jozo >> >>> >>> -- >>> Michal Hocko > > -- > Michal Hocko _________________________________________________________________ Windows Live™ Hotmail®: Search, add, and share the web’s latest sports videos. Check it out. http://www.windowslive.com/Online/Hotmail/Campaign/QuickAdd?ocid=TXT_TAGLM_WL_QA_HM_sports_videos_072009&cat=sports |
From: Michal H. <ms...@gm...> - 2009-07-23 19:51:17
|
On Wed, Jul 22, 2009 at 08:11:09PM +0000, Jozef Misutka wrote: > > On Wed, Jul 22, 2009 at 02:06:48PM +0000, Jozef Misutka wrote: > >>> > >>> Hi Jozo, > >>> I am just writing some code and need to add an existing property to an > >>> array. I am wondering why does this interface takes IProperty& rather > >>> than shared_ptr as the value parameter? > >> > >> the question is, why should it take a ptr? > > > > Because we are working with the ptr everywher? Consider simple example: > > sorry for the mess in my emails. sending it once again. > > i use a fair simple an intuitive rule: where you expect a valid > instance use &, otherwise *. you avoid many complex checks and > problems. Yes, I understand this POV in general, but this makes API little bit inconsistent (I don't remember any such an asymmetric API[*] - even though it is fair to say that none of them dealt with smart pointers). Moreover, does this really add some checks to the code? Aren't smart pointers enough armor here? If someone uses share_ptr() then we will get assertion failure when dereferencing which is OK because this is clearly a bug. Nevertheless, I will not oppose and if you want to keep the current state then we will go this way. I am just writing some code and I would like to use it to clean-up kernel API to be comfortable and usable (sadly we are quite far from both). > in you proposal you could write > > array->addProperty(shared_ptr()); --- [*] usually T Foo::get(), Foo::add(T&) when you are working with collections > > > > > shared_ptr array; > > > > I would like: > > array->addProperty(differentArray->getProperty(1)); > > > > I have to: > > array->addProperty(*differentArray->getProperty(1)); > > > > or consider new element adding > > array->addProperty(*shared_ptr(CStringFactory::getInstance())); > > array->addProperty(CString()); > > /jozo > > > > > This sounds little bit asymmetric and I don't see any reason for it. > > This question is not a call for change, I just don't understand it. > > Maybe we should reconsider during API cleanup? > > > >> > >> /jozo > >> > >>> > >>> -- > >>> Michal Hocko > > > > -- > > Michal Hocko > > _________________________________________________________________ > Windows Live? Hotmail?: Search, add, and share the web?s latest sports videos. Check it out. > http://www.windowslive.com/Online/Hotmail/Campaign/QuickAdd?ocid=TXT_TAGLM_WL_QA_HM_sports_videos_072009&cat=sports -- Michal Hocko |