Re: returning dynamically allocated object through reference
mundacho@gmail.com wrote:
I'd like to know if this code is going to create a memory leak in the
calling function (this codes compiles):
ili::IntImg
&RectangleImageComparator::synchronize(const ili::IntImg &pImage)
{
ili::IntImg *tempObj = new ili::IntImg(pImage);
return *tempObj;
}
No, it doesn't create a leak per se. The problem is how this function is
used. You can e.g. ignore the returnvalue or not afterwards invoke 'delete
&res', which would both cause any reference to the memory and thus the
memory itself to be lost.
i wanted to return a reference because it's faster because the object
is not copied but passed directly, isn't it?
I don't know, I guess you actually measured that it is faster, right?
My question is if the calling function will free automatically
the object returned, if I do:
// in the calling function I'd do:
ili::IntImg myVar = synchronize(image);
// will myVar be destroyed automatically???
Firstly, you will have a local copy which circumvents your initial aims.
Secondly, the dynamically allocated object will never be released. You can
easily find out if that is the case by setting a breakpoint in ctor, cctor,
operator= and dtor.
Summary:
1. Return by value per default unless it turns out to be too slow.
2. You can e.g. return a std::auto_ptr to signal that an object's ownership
is moved. Other alternatives are passing in a reference to the object being
filled with data or "MOJO" (search the web for it).
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! ]