Re: memory leak in constructor and during object creation
On Sep 29, 7:33 pm, raj s <yesr...@gmail.com> wrote:
Will the below code cause memory leak in c++
class base{
int a;
int *pint;
someclass objsomeclass;
someclass* psomeclass;
base(){
objsomeclass = someclass();
psomeclass = new someclass();
pint = new int();
throw "constructor failed";
a = 43;
}}
Should be a semicolon after this. Now, as
you suspect, if you create a 'base' then
you get a memory leak because the memory
allocated by "new someclass()" and "new int()"
is never freed.
The best solution is to design your class
to not 'new' things. I guess you are coming
from Java or something like that by your code
stype. In C++ you rarely need to have classes
that 'new' their members. For example, in
the above code, there is no need to 'new' an int.
Failing that, you will have to use
'smart pointers' instead of raw pointers.
For example, if instead of:
someclass *psomeclass;
you could have:
auto_ptr<someclass> psomeclass;
Note that you can initialize things in
the constructor initializer list:
base(): psomeclass( new someclass ) {.....}
Some comments on the rest of your code:
main(){
base temp();
This doesn't declare any objects, it declares
a function. I think you meant:
base temp;
You seem to have a fascination with useless
parentheses :)