Re: will it cause memory leak?
Rayer <shivanna@gmail.com> wrote:
consider the code below :
if(char* thechar = new char[(strlen(pylon)+1)])
{
....//do something
}
else
{
...//do something if fail to deploy memory
}
actually, "thechar" have been given a memory space in a if-scope, will
it destroy(delete) itself as soon as process goes out of the scope? or
it still need a delete to avoid memory leak?
tks all, regards.
My advice is don't use new/delete operators directly in any high
level code if possible not to do so. A common idiom is RAII
Resource Allocation Is Initialization, allocate in a ctor and
deallocate in a dtor of a non copyable class.
template <clsss T>
class buffer_ptr
{
typedef typename boost::shared_ptr<T> smart_type;
smart_type ptr;
struct array_deleter
{
template <class U>
void operator () (U* u) {delete [] u;}
};
public:
explicit buffer_ptr(std::size_t n)
:ptr(new T[n],array_deleter()){}
T* get() const {return ptr.get();}
operator bool() {return ptr.operator bool();}
};
// ...
if(buffer_ptr<char> buffer(std::strlen(pylon)))
{
char * ptr = buffer.get();
// don't delete ptr
// use ptr
}
else
{
// failure code,
}
it is possible to write a buffer_ptr as a non copyable stack class
which just holds array news a pointer on constrution and array deletes
in the dtor. with the member functions get() and operator bool().
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]