Re: Why doesn't the class/object keep its internal data properly
when returned from function?
On 2008-04-28 17:48, Rob wrote:
I have a vector of a class type and when I create an object inside a
function and return that and add it to the vector, it doesn't properly
keep the data inside it. So I have a few questions:
1. Is this because it loses scope since it wasn't created with "new"?
No, it is probably because you have not implemented the copy-constructor
correctly, but without seeing the code it is impossible to tell.
2. If I do create it with new, but the vector holds objects not
pointers, will the vector's "delete" operator function still handle
deleting all those pointers?
No, and especially not if you return a copy of the new object and then
looses all references to it (like you do below).
CODE 1:
//Doing without "new"
SomeClass create(string name)
{
return SomeClass( name );
}
int main()
{
std::vector<SomeClass> p;
p.push_back( create( "Fred" ) );
}
CODE 2:
//Doing with "new"
SomeClass create(string name)
{
return *( new SomeClass( name ) );
}
This creates a copy of the "newed" object which is then returned, the
"newed" object is then lost (since you have no pointers to it) which
means you are leaking memory.
--
Erik Wikstr??m