Re: Silver bullet for C++ memory management ?
MN wrote:
I've been using smart pointer to save my efforts on dealing with
memory management in C++. A sample of code is as below.
//////// begin of code /////////
#define PtrOf(X) boost::shared_ptr < X >
That is extremely ugly, because it hides the fact that PtrOf is a macro,
with all the hairy little features that comes with that.
It has been worked well, however there are two ugly problems:
1) If we put the macro in a class interface, it's really ugly and
obstruct the clarity of the interface.
Even worse, it obstructs what is essential to me when passing pointers: who
owns the thing? If you use 'std::auto_ptr<T>', you know that ownership is
transferred. If you use 'T const*', you can often assume that the ownership
is retained and that the object is only passed for inspection. Further, the
question is whether the pointer can be null. Actually, it is even hard to
pass a null pointer, since you don't even know the pointer type and
particularly smart pointers don't have implicit conversions. That requires
use of 'PtrOf(T)()' which is even less readable.
2. More seriously, if we have to use some 3rd party libraries which do
not use the same convention, instead using bare pointer, we have a
bigger problem to deal with.
Well, if you need to pass pointers around to a third party library, you
always have problems. In any case, there always is a way to extract a raw
pointer from a smart pointer and unless ownership transfer takes place via
raw pointers you at least have a chance to interact.
My question is whether there is a way to address C++ memory management
to reduce it to a painless task ( as Java and C# ) without using 3rd
party garbage collector ?
No, I don't think so. However, I wonder why you object to using a good
garbage collector but don't oppose to using a bad C++ library. I guess that
is just internal politics, and for those there rarely is a technical
solution.
Uli
--
Sator Laser GmbH
Gesch??ftsf??hrer: Thorsten F??cking, Amtsgericht Hamburg HR B62 932
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]