On 3/3/18 6:49 PM, Steven D'Aprano wrote:
On Sat, 03 Mar 2018 12:37:08 -0500, Richard Damon wrote:
With RAII and immediate destruction on end of scope, we can automate the
release, without it and you need a lot of explicit code to manage these
resources.
Not so much.
with resource_i_care_about() as rsrc:
process(rsrc)
is hardly what I call "a lot of explicit code". Yes, there's some code in
the context manager, but you write that *once* (if it isn't already
written for you!) and you're done.
The with statement handles the C++ case of using a unique_ptr, where the
resource is aquired and release within a single block scope and thus a
single stack based object is ultimately responsible for the lifetime of
the resource.
I am not sure how it would handle a resource that gets shared for a
while with something like a shared_ptr, and needs to be released when
all the people who is has been shared with are done with their copy.
Admittedly, this case is much less likely to be using such a critical
resource, but it might. In Python, currently, you would either need to
keep an explicit usage count to allow you to delete it when done, or let
things wait for the collector to find it.
--
Richard Damon
--
https://mail.python.org/mailman/listinfo/python-list