c++ - Memory management pointers -
this question has answer here:
i saw common practice of deleting pointer amd making null in destructor if no memory allocated pointer on heap. consider below c++ code:
dummy.h
class dummy { int* a; } dummy.cpp
dummy::dummy():a(null) { cout<<inside const"; } dummy::~dummy() { if(a!=null) { delete a; = null; } } bool func() { = func1(); } in above code although memory not allocated on heap, deleted. should not lead memory leak?
making null pointless, since it's destroyed.
your code isn't deleting if it's null, due if (a!=null). however, that's pointless: applying delete null pointer nothing, can reduce destructor unconditional delete a; (assuming know it's either null, or points object created new).
you need make sure class either isn't copyable, or has valid copy semantics, per rule of three; otherwise, copying object lead deleting same memory twice, not allowed.
better still, stop juggling pointers, , use smart pointers, containers , other raii types make life simpler.
Comments
Post a Comment