Re: To use or not to use smart pointers?
On Jul 18, 10:17 pm, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
Boris wrote:
I had a 3 hours meeting today with some fellow programmers that are
partly not convinced about using smart pointers in C++. Their main
concern is a possible performance impact. I've been explaining the
advantages of smart pointers endlessly (which are currently used in
all our C++ software; we use the Boost smart pointers) as I'm
seriously concerned that there is a shift to raw pointers. We are not
developing system software but rather normal Windows programs (with
exceptions turned on). I wouldn't want to write a C++ program without
smart pointers any more but after that endless discussion I wonder if
I'm too strict. Any serious arguments not to use smart pointers?
There _is_ no performance impact.
I'd be interested in seeing your implementation, then. Hans
Boehm ran a set of benchmarks comparing boost::shared_ptr with
raw pointers and the Boehm collector, and the shared_ptr didn't
come out very well. In general, boost::shared_ptr suffers at
three points:
-- There's an extra allocation when you create the first
pointer, and a free when you free the last.
-- The pointer is twice the size of a raw pointer. Most
significantly, most compilers will return a raw pointer in a
register, but will use an intermediate, temporary variable
when returning a boost::shared_ptr.
-- Copying the pointer requires incrementing a counter. Never
zero overhead, and possibly significant in a multithreaded
environment.
Whoever claims there is, should prove it to you instead of
just saying that.
All they have to do is cite existing literature.
A smart pointer is just a way for a programmer to relax and
not have to remember when to delete the object when the
pointer goes out of scope.
Except that the simplest way to ensure that an object is
correctly destructed and the memory freed when it goes out of
scope is just to declare it as a local variable.
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34