sure. if I'm sharing ownership of an object with the OS or some library, then 
I'm granting that code the option to keep the object around a long as it needs 
it. You're right. I can't predict exactly when the object might go away. If 
something isn't going away, it is because some system is actually keeping it 
around for a reason. I can code around that reality to keep my code running in 
an orderly and predictable fashion.

That isn't the same thing as my system being dependent on when a background 
process kicks in and starts scanning memory looking for pointers in use.

Aside from that, for objects that are entirely owned by my code, I can 
precisely control their lifetimes by the retain count. There is zero 
non-determinism there. 

shared_ptr does retain counting in a way that is easy to maintain and extend 
without the perils of manually releasing and retaining pointers.  That gives me 
the reliability and safety I need without introducing a whole new 
unknown-element to my code base that will cause its own issues that I'll have 
to code around.


another benefit....shared_ptr is cross platform.  so, on the mac, I store objc 
objects in them. On windows, the same datamembers can take windows-specific 
structures and manage them.   shared_ptr<void> works great to put in a header 
intended to be on multiple platforms. in the implementation file, I can stick 
whatever I want in that shared_ptr and give it a custom deleter. this makes it 
really straightforward to use common header files with OS-specific 
implementations.

yea...yea...yea...you Apple employees don't have to worry about Windows, but 
I'm not that fortunate.  :)




On Friday, June 26, 2009, at 12:08PM, "Bill Bumgarner" <[email protected]> wrote:
>On Jun 26, 2009, at 1:31 PM, James Gregurich wrote:
>> If my resource is handed off to some external subsystem for release  
>> and I can't DETERMINE the order of the releases with respect to each  
>> other and other components of my code, then I would call that non- 
>> deterministic and undesirable.
>
>As soon as your resource is handed off to any subsystem that you did  
>not write, you can't determine the order of releases.   Said subsystem  
>might release or it might cache for a while or it might retain it for  
>purposes of background processing (to be released later) or it might  
>autorelease or it might retain then autorelease in a different thread.
>
>The point is the same as -retainCount.  Once your object goes through  
>any of the system APIs, there is a chance that the retain count will  
>change and said behavior may differ based on architecture, OS release,  
>or something else.
>
>b.bum
>
>
>
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to