Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Comprehensive treatment of new / delete

Reply
Thread Tools

Comprehensive treatment of new / delete

 
 
Dave
Guest
Posts: n/a
 
      07-18-2005
Hello all,

I'd like to find a source on the web that discusses, in a comprehensive
manner and in one place, everything about new / delete. It should include
overloading operator new, the new operator, placement, nothrow, arrays,
etc...

My books cover the topic, I've found FAQs on the web that cover the topic,
and so on, but all the sources I've found are disjointed. There's a bit on
this page, a bit on that page, and so on. The information may all be there,
but it's kind of hard to piece it all together.

If anybody knows of an article out there that gives a comprehensive
treatment of this topic in one place, I'd appreciate a link.

Thanks,
Dave


 
Reply With Quote
 
 
 
 
Gianni Mariani
Guest
Posts: n/a
 
      07-18-2005
Dave wrote:
> Hello all,
>
> I'd like to find a source on the web that discusses, in a comprehensive
> manner and in one place, everything about new / delete. It should include
> overloading operator new, the new operator, placement, nothrow, arrays,
> etc...
>
> My books cover the topic, I've found FAQs on the web that cover the topic,
> and so on, but all the sources I've found are disjointed. There's a bit on
> this page, a bit on that page, and so on. The information may all be there,
> but it's kind of hard to piece it all together.
>
> If anybody knows of an article out there that gives a comprehensive
> treatment of this topic in one place, I'd appreciate a link.


I don't know of one but let's see if we can make one !

http://www.google.com/search?q=new+d....parashift.com

That will give you a fairly detailed treatment of the topic.

The code below covers most of the new/delete usages I have used.

------------------------------------------------------------------------
#include <unistd.h>
#include <cstring>

// non-portable but non-allocating write method
void Write( const char * l_str )
{
::write( 1, l_str, std::strlen( l_str ) );
::write( 1, "\n", 1 );
}



#include <new>
#include <cstdlib>


inline void * operator new ( size_t i_val )
{
Write( "new called" );

void * l_ptr = std::malloc( i_val );
return l_ptr;
}

inline void operator delete ( void * i_ptr )
{
Write( "delete called" );

if ( i_ptr )
{
std::free( i_ptr );
}
}

struct A
{
A()
{
Write( "A contructed" );
}

~A()
{
Write( "A destructed" );
}


};

template <typename X>
void test1()
{

X * l_a = new X;

delete l_a;

X * l_b = new X[3];

delete [] l_b;
}


// This does not seem to be called - no matter what
inline void operator delete ( void * i_ptr, size_t i_val )
{
Write( "delete (with size) called" );

if ( i_ptr )
{
std::free( i_ptr );
}
}


template <typename X>
void test2()
{

X * l_a = new X;

delete l_a;

X * l_b = new X[3];

delete [] l_b;
}


struct B
{

inline void * operator new ( size_t i_val )
{
Write( "B::new called" );

void * l_ptr = std::malloc( i_val );
return l_ptr;
}


inline void operator delete ( void * i_ptr )
{
Write( "B::delete (with size) called" );

if ( i_ptr )
{
std::free( i_ptr );
}
}

B()
{
Write( "B contructed" );
}

~B()
{
Write( "B destructed" );
}


};

struct C
{

inline void * operator new ( size_t i_val )
{
Write( "C::new called" );

void * l_ptr = std::malloc( i_val );
return l_ptr;
}


inline void * operator new ( size_t i_val, void * i_ptr )
{
Write( "C::new placement new called" );

return i_ptr;
}


inline void operator delete ( void * i_ptr, size_t i_val )
{
Write( "C::delete (with size) called" );

if ( i_ptr )
{
std::free( i_ptr );
}
}

C()
{
Write( "C contructed" );
}

~C()
{
Write( "C destructed" );
}


};

template <typename X>
void test3()
{

long x[ ( sizeof( long ) + sizeof( X ) -1 )/sizeof( long ) ];

X * l_x = new ( ( void * ) x ) X;

l_x->~X();

}



int main()
{
Write( "\ntest1<A>" );
test1<A>();

Write( "\ntest2<A>" );
test2<A>();

Write( "\ntest1<B>" );
test1<B>();

Write( "\ntest1<C>" );
test1<C>();

Write( "\ntest3<A>" );
test3<A>();

Write( "\ntest3<C>" );
test3<C>();

}

-------- output ----------

../new_del

test1<A>
new called
A contructed
A destructed
delete called
new called
A contructed
A contructed
A contructed
A destructed
A destructed
A destructed
delete called

test2<A>
new called
A contructed
A destructed
delete called
new called
A contructed
A contructed
A contructed
A destructed
A destructed
A destructed
delete called

test1<B>
B::new called
B contructed
B destructed
B::delete (with size) called
new called
B contructed
B contructed
B contructed
B destructed
B destructed
B destructed
delete called

test1<C>
C::new called
C contructed
C destructed
C::delete (with size) called
new called
C contructed
C contructed
C contructed
C destructed
C destructed
C destructed
delete called

test3<A>
A contructed
A destructed

test3<C>
C::new placement new called
C contructed
C destructed
 
Reply With Quote
 
 
 
 
Alex Vinokur
Guest
Posts: n/a
 
      08-02-2005
Dave wrote:
> Hello all,
>
> I'd like to find a source on the web that discusses, in a comprehensive
> manner and in one place, everything about new / delete. It should include
> overloading operator new, the new operator, placement, nothrow, arrays,
> etc...

[snip]
> If anybody knows of an article out there that gives a comprehensive
> treatment of this topic in one place, I'd appreciate a link.
>
> Thanks,
> Dave


Some samples with 'new'
http://groups.google.com/group/comp....2c7f9231d4b03b

--
Alex Vinokur
email: alex DOT vinokur AT gmail DOT com
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
"return delete (new int)" compile but "return delete (new X X C++ 4 07-19-2010 05:47 PM
Cisco BGP confederation treatment changes in IOS 12.3 (LONG post) JPC Cisco 1 12-20-2005 01:18 PM
Mixing new/delete and operator new/delete? Jef Driesen C++ 1 01-19-2005 01:56 PM
Poor Respect Treatment Shashami MCSE 5 07-20-2004 01:33 PM
Overloading new[] and delete[]: how do they vary from new and delete? HeroOfSpielburg C++ 1 08-06-2003 03:58 AM



Advertisments