For Programmers: Free Programming Magazines  


Home > Archive > VC Language > November 2005 > auto_ptr









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author auto_ptr
Mark

2005-11-24, 7:01 pm

struct A
{
int a;
int b;
int c;
};

Now I define an auto_ptr to point to a new area of memory...

auto_ptr<A> a = new char[20];

Now when I do...

delete a;

Does it delete 12 bytes (the size of A) or 20 bytes (the size allocated)?

--
Best regards
Mark


Ulrich Eckhardt

2005-11-24, 7:01 pm

Mark wrote:
> struct A
> {
> int a;
> int b;
> int c;
> };
>
> Now I define an auto_ptr to point to a new area of memory...
>
> auto_ptr<A> a = new char[20];
>
> Now when I do...
>
> delete a;
>
> Does it delete 12 bytes (the size of A) or 20 bytes (the size allocated)?
>


This doesn't even compile, I daresay. Anyhow, the point of std::auto_ptr<>
is that you don't have to call delete yourself. Once initialized, the
pointee belongs to the auto_ptr and will be deleted by it. Please also read
up on the semantics of copying std::auto_ptrs, they are surprising at
first.

If you want to use it for automated buffer management, I'm afraid it won't
work. For that, take a look at the smart pointer library of Boost (or TR1),
in particular shared_array and scoped_array.

Uli

Tom Widmer [VC++ MVP]

2005-11-24, 7:01 pm

Mark wrote:
> struct A
> {
> int a;
> int b;
> int c;
> };
>
> Now I define an auto_ptr to point to a new area of memory...
>
> auto_ptr<A> a = new char[20];


The line above doesn't compile. You need:

auto_ptr<A> a(new A); //or new A()

> Now when I do...
>
> delete a;
>
> Does it delete 12 bytes (the size of A) or 20 bytes (the size allocated)?


The whole point of auto_ptr is that you don't need to call delete on it
- it deletes the memory automatically when it goes out of scope. Also,
note that you can't use new[] with auto_ptr, only single object new,
since it uses delete to free the memory, not delete[].

Tom
Igor Tandetnik

2005-11-24, 7:01 pm

"Mark" <swozz_@hotmail.com> wrote in message
news:%23napw8P8FHA.2040@TK2MSFTNGP14.phx.gbl
> struct A
> {
> int a;
> int b;
> int c;
> };
>
> Now I define an auto_ptr to point to a new area of memory...
>
> auto_ptr<A> a = new char[20];


That should not compile, nor does it make any sense. What are you trying
to do?

> Now when I do...
>
> delete a;


The whole point of auto_ptr is so that you don't need to explicitly
delete.

> Does it delete 12 bytes (the size of A) or 20 bytes (the size
> allocated)?


Seeing how your code does not compile, the question is moot.
--
With best wishes,
Igor Tandetnik

With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925


Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com