Re: Better way of allocating a memory( auto_ptr vs new vs malloc)
On 2008-12-06 23:36, blargg wrote:
Ami wrote:
My god that is so hard to read. Look at the difference a couple of
find-and-replaces and some indention do:
And it lets us find some things to improve upon.
I have few qustions
Consider the allocation
T p(T());
T p(); will do just as well.
T() in above would do default initialization right
then I can safely avoid the use of C style memset..
and then nevere have to de allocate the same.
As far as auto_ptr is concrned , do I again need to initialize to
T () as shown below
auto_ptr<T>p = (new T()) ;
No need to use () around the new, auto_ptr<T>p = new T(); works just as
fine.
another major concerned abt using auto_ptr is
after the memory allocation is done tht is lets say
int main ()
{
auto_ptr<T>p = (new T()) ;
func(p.get()); //
return ( EXIT_SUCESS);
}
void func(T *output)
{
// some code
}
do u see any problem with uisng an auto pointer like above i.e passing
as an argument in a function call .
No problem at all, but you might want to consider using a shared pointer
and pass that instead of using get(). Or pass a reference to the auto ptr.
Is there any memory Leak ?
No, but there is always the risk that func() will somehow save the
pointer you pass in and someone else will later try to access it.
I think the auto of auto ptr is the best way ..
Also in the code the malloc is done like
T *p = (T *)malloc (sizeof(T)*(n+1));
I'm not sure how it is in C++, but in C you do not have to cast the
result of malloc.
so using new for above is like
T *p = (T *)new char [sizeof(T)*(n+1)];
T* p = new T[n+1];
--
Erik Wikstr??m