Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old November 10th, 2006, 09:35 PM
Karim
Guest
 
Posts: n/a
Default Auto Vector of pointers?

Hi,

There is a certain structure that I need and I am planning to implement
but I wanted to make sure nothing similar that already exists.

My main objective is to have a vector that mainly carries pointers and
in it destructor, it would delete those pointers.

so it would be auto_vector<Class1 * autoVec;
autoVec.push_back(new Class1());

and somewhere in ~auto_vec there would be a delete for all memebers.

My question is, is there anything in STL that already does this
funtionality? and does anyone see any potential issues with this.

Thanks.

  #2  
Old November 10th, 2006, 09:45 PM
ivan.leben@gmail.com
Guest
 
Posts: n/a
Default Re: Auto Vector of pointers?

Quote:
My question is, is there anything in STL that already does this
funtionality? and does anyone see any potential issues with this.
There no such array class that would handle the deletion of inserted
objects itself, however ther is a template class names auto_ptr which
deletes the pointed object once it goes out of scope.

Now the technique that you are probably supposed to use is, to fill a
vector with auto_ptrs, however u still cant be sure if the user of your
class will keep another instance of the pointer, so the object in fact
would not get destroyed when it is erased from your array.

The other way is to just write a wrapper of standard vector class which
deletes the objects in its erase, pop and clear functions.

greets
Ivan Leben

  #3  
Old November 10th, 2006, 09:55 PM
Thomas Tutone
Guest
 
Posts: n/a
Default Re: Auto Vector of pointers?


ivan.leben@gmail.com wrote:
Quote:
Now the technique that you are probably supposed to use is, to fill a
vector with auto_ptrs, however u still cant be sure if the user of your
class will keep another instance of the pointer, so the object in fact
would not get destroyed when it is erased from your array.
You can't have a vector of auto_ptrs. It's undefined behavior, but
probably won't even compile (if you're lucky).

Best regards,

Tom

  #4  
Old November 10th, 2006, 10:05 PM
Roland Pibinger
Guest
 
Posts: n/a
Default Re: Auto Vector of pointers?

On 10 Nov 2006 13:53:56 -0800, "Karim" <karim.elsaid@gmail.comwrote:
Quote:
>There is a certain structure that I need and I am planning to implement
>but I wanted to make sure nothing similar that already exists.
>My main objective is to have a vector that mainly carries pointers and
>in it destructor, it would delete those pointers.
That's probably not a perfect solution. Your destructor cannot know if
the pointed-to objects have been allocated with 'new' before.
Quote:
>so it would be auto_vector<Class1 * autoVec;
autoVec.push_back(new Class1());
>
>and somewhere in ~auto_vec there would be a delete for all memebers.
>
>My question is, is there anything in STL that already does this
>funtionality?
No
Quote:
>and does anyone see any potential issues with this.
Maybe the following approximates your requirements:
http://www.codeproject.com/vcpp/stl/ptr_vecto.asp
http://sourceforge.net/projects/ptr-vector/

Best wishes,
Roland Pibinger
  #5  
Old November 10th, 2006, 10:55 PM
Howard Hinnant
Guest
 
Posts: n/a
Default Re: Auto Vector of pointers?

In article <1163195636.132623.134380@e3g2000cwe.googlegroups. com>,
"Karim" <karim.elsaid@gmail.comwrote:
Quote:
Hi,
>
There is a certain structure that I need and I am planning to implement
but I wanted to make sure nothing similar that already exists.
>
My main objective is to have a vector that mainly carries pointers and
in it destructor, it would delete those pointers.
>
so it would be auto_vector<Class1 * autoVec;
autoVec.push_back(new Class1());
>
and somewhere in ~auto_vec there would be a delete for all memebers.
>
My question is, is there anything in STL that already does this
funtionality? and does anyone see any potential issues with this.
* There is:

std::vector<std::tr1::shared_ptr<T

which isn't exactly what you want, but it is somewhat close. Substitute
boost::shared_ptr for std::tr1::shared_ptr if you don't have the tr1
version.

http://www.boost.org/libs/smart_ptr/shared_ptr.htm

* There is the boost Pointer Container Library which sounds very close
to what you want:

http://www.boost.org/libs/ptr_contai...container.html

* Looking to the future, for C++0X I believe there will be:

std::vector<std::unique_ptr<T>>

which is roughly equivalent to vector<auto_ptr<T>except that it works.

http://www.open-std.org/jtc1/sc22/wg...56.html#Additi
on%20-%20Class%20template%20unqiue_ptr

If you still want to write your own, the issues are:

* What are the copy semantics? I.e. what happens when you copy
construct or assign one of these things.

* Will you try to emulate move semantics (which is awkward, but mostly
doable in today's C++)? Move semantics essentially means transferring
ownership of the pointers.

For example, auto_ptr has no copy semantics. It does have move
semantics, but uses copy syntax to accomplish the move semantics (which
is why it is fundamentally unsafe).

-Howard
  #6  
Old November 11th, 2006, 02:05 AM
Gianni Mariani
Guest
 
Posts: n/a
Default Re: Auto Vector of pointers?

Karim wrote:
Quote:
Hi,
>
There is a certain structure that I need and I am planning to implement
but I wanted to make sure nothing similar that already exists.
>
My main objective is to have a vector that mainly carries pointers and
in it destructor, it would delete those pointers.
>
so it would be auto_vector<Class1 * autoVec;
autoVec.push_back(new Class1());
>
and somewhere in ~auto_vec there would be a delete for all memebers.
>
My question is, is there anything in STL that already does this
funtionality? and does anyone see any potential issues with this.
>
Thanks.
>
Austria C++ "Pointer" does what you want but its semantics are unusual
so be careful. It's like std::auto_ptr but allows implicit transfer of
pointers which can lead to many unexpected results - use with care !

http://austria.sourceforge.net/dox/h..._1Pointer.html

  #7  
Old November 11th, 2006, 08:25 AM
Rolf Magnus
Guest
 
Posts: n/a
Default Re: Auto Vector of pointers?

Roland Pibinger wrote:
Quote:
On 10 Nov 2006 13:53:56 -0800, "Karim" <karim.elsaid@gmail.comwrote:
Quote:
>>There is a certain structure that I need and I am planning to implement
>>but I wanted to make sure nothing similar that already exists.
>>My main objective is to have a vector that mainly carries pointers and
>>in it destructor, it would delete those pointers.
>
That's probably not a perfect solution. Your destructor cannot know if
the pointed-to objects have been allocated with 'new' before.
Well, that would be part of the interface requirements that are supposed to
be well-documented, just like for std::auto_ptr or any other auto-deleting
smart pointers.

  #8  
Old November 11th, 2006, 08:55 AM
Roland Pibinger
Guest
 
Posts: n/a
Default Re: Auto Vector of pointers?

On Sat, 11 Nov 2006 09:40:40 +0100, Rolf Magnus <ramagnus@...de>
wrote:
Quote:
>Roland Pibinger wrote:
Quote:
>On 10 Nov 2006 13:53:56 -0800, "Karim" <karim.elsaid@...comwrote:
Quote:
>>>There is a certain structure that I need and I am planning to implement
>>>but I wanted to make sure nothing similar that already exists.
>>>My main objective is to have a vector that mainly carries pointers and
>>>in it destructor, it would delete those pointers.
>>
>That's probably not a perfect solution. Your destructor cannot know if
>the pointed-to objects have been allocated with 'new' before.
>
>Well, that would be part of the interface requirements that are supposed to
>be well-documented, just like for std::auto_ptr or any other auto-deleting
>smart pointers.
Right, that' s more a design question than an implemetation or
documentation question. A generic container (or any generic component)
that works only with 'newed' objects is not really elegant. IMHO, good
design is characterized by symmetry between allocation and
deallocation, i.e. the allocator shall also be the de-allocator.

Best wishes,
Roland Pibinger
 

Bookmarks

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 Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles