|
Boost Users : |
From: Philippe Lambert (philippe.lambert_at_[hidden])
Date: 2006-08-02 16:19:35
Hello,
We are a large team of C++ developers, using Boost at large. We have a
philosophical issue about shared_ptr usage and I'm looking for external
inputs.
The 2 clans are opposed about a simple question: "Should we use shared_ptr
in the API function signatures of a module (dll or else)". Both clan use a
lot of Sutter/Meyers/other gurus and authors citation to support their view.
1- Pros: shared_ptr are everywhere in the current code. It is the best way
to prevent resources leaks, it is easy to use, convenient, it is mostly
safe. A lot of gurus are saying "use shared_ptr". Preventing them in API
will means a lot of .get() in the existing code.
2- Cons: A shared_ptr in the API give the right to the called function to
keep a copy (virtually permanently) of the object. It is a bad indication
in the contract if the function doesn't need to keep a copy. It tell to the
user "take care, I may keep a copy of this and influence his life cycle".
If it is not the case, you should tell it in the signature by asking for a
const reference or something like it. Also, if the caller have a stack
object and want to use an API function which ask for a shared_ptr, he will
need to create a copy, or create a shared_ptr with a deactivated
destructor... It is not a beautiful thing, both ways.
Of course, I thing that the correct solution is in between, but how to state
it?
If it is a real issue, I would like to read other team opinion, standard,
decision algo or policy... If we are technically totally disoriented, I
would like to be redirected...
Thanks to all
Philippe Lambert
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net