By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,269 Members | 1,507 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,269 IT Pros & Developers. It's quick & easy.

boost::shared_ptr vs. auto_ptr

P: n/a
Are there any advantages of using boost::shared_ptr other than auto_ptr from
standard library?

Jul 22 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
* ctick:
Are there any advantages of using boost::shared_ptr other than auto_ptr from
standard library?


There are a number of advantages.

First, they're two different beasts: std::auto_ptr transfers ownership
so that with some caution you can guarantee that only one pointer points
to a particular object at any time, whereas boost::shared_ptr provides
reference counting so that many pointers can point to the same object.

Second, you cannot put std::auto_ptr's in a standard container, but you
can with boost::shared_ptr.

Third, although the standard specially provides for calling a destructor
on an object of incomplete class, not all compilers support that. This
problem pops up in e.g. the pimpl idiom. With boost::shared_ptr you
replace the direct delete expression in std::auto_ptr with a custom
destroy-function that can be defined where the full definition of the
class is available, side-stepping the issue.

I could list up a fourth and fifth advantage, and perhaps more, but I
think that's enough. The main advantage of std::auto_ptr is that it's
always there and that it's standard. It should therefore be used when
the generality of e.g. boost::shared_ptr is not required.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Jul 22 '05 #2

P: n/a
On Sat, 19 Jun 2004 20:23:26 GMT in comp.lang.c++, al***@start.no (Alf
P. Steinbach) wrote,
I could list up a fourth and fifth advantage, and perhaps more, but I
think that's enough. The main advantage of std::auto_ptr is that it's
always there and that it's standard. It should therefore be used when
the generality of e.g. boost::shared_ptr is not required.


I think that auto_ptr also has less overhead cost than shared_ptr's
ownership tracking mechanism when you are doing the simple things it is
capable of and have no need for shared ownership.

Jul 22 '05 #3

P: n/a
"ctick" <ct***@flare.com> wrote in message
news:g61Bc.6352$OB3.4344@bgtnsc05-
Are there any advantages of using boost::shared_ptr other than auto_ptr from standard library?


You're comparing apples to oranges.
Jul 22 '05 #4

P: n/a
Siemel Naran wrote:

"ctick" <ct***@flare.com> wrote in message
news:g61Bc.6352$OB3.4344@bgtnsc05-
Are there any advantages of using boost::shared_ptr other than auto_ptr

from
standard library?


You're comparing apples to oranges.


http://www.people.virginia.edu/~rjh9u/apporang.html
Jul 22 '05 #5

P: n/a
In message <40****************@news.west.earthlink.net>, David Harmon
<so****@netcom.com.invalid> writes
On Sat, 19 Jun 2004 20:23:26 GMT in comp.lang.c++, al***@start.no (Alf
P. Steinbach) wrote,
I could list up a fourth and fifth advantage, and perhaps more, but I
think that's enough. The main advantage of std::auto_ptr is that it's
always there and that it's standard. It should therefore be used when
the generality of e.g. boost::shared_ptr is not required.


I think that auto_ptr also has less overhead cost than shared_ptr's
ownership tracking mechanism when you are doing the simple things it is
capable of and have no need for shared ownership.

For the _really_ simple things, consider boost::scoped_ptr. No
overheads, no sharing or transfer of ownership at all.

--
Richard Herring
Jul 22 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.