----- Original Message -----
From: "David Abrahams" <[EMAIL PROTECTED]>
To: "Boost mailing list" <[EMAIL PROTECTED]>
Sent: Tuesday, December 10, 2002 9:53 PM
Subject: Re: [boost] Formal review: Optional library


> [SNIP]
>
> "Joel de Guzman" <[EMAIL PROTECTED]> writes:
>
> >> Not so...
> >> The low-level implementation is like a variant ONLY is the wrapped
object is
> >> not a POD.
> >> When you have, say, optional<int>, the implementation uses: struct {
int
> >> m_value ; bool m_initialized }
> >> As a result, value access, via operator*() is more efficient since it
> >> doesn't dereference a pointer.
> >
> > That depends on how the variant is implemented. Which variant
> > implementation are you referring to? I'm sorry. I'm confused with
> > what you are saying. I can't see why it is more efficient. Neither do
> > I see a dereference in any case.
>
> I'm with Joel on this one. It seems to me that no special optimization
> should be needed for PODs; all you should need is some aligned storage
> in which to construct the contained object and one or more bits to
> indicate which of the allowed types (if any) is held there.
>
Let's see:

Currently, the non-POD case implementation goes like this:

(this is a sketch actually)

template<class T>
class optional1
{
  optional1 ( T const& v ) { p = new (buffer.address()) T(v) ; }

  T const& operator *() { return *p; } // Dereference here

  aligned_storage<T> buffer ;
  T* p ;
}  ;

The object is effectively contained in an aligned storage.
AFAIK, to access the object I need to address the storage, for which
I need a pointer. But then, in order to return a reference to
the object, I need to dereference the pointer.

OTOH, when T is a POD, so there is no need to bypass its ctor
(since it has a trivial ctor),
the implementation goes like this:

template<class T>
class optional2
{
  optional2 ( T const& val ) v(val) {}

  T const& operator *() { return val; } // No Dereference here

  T val ;
} ;

Anyway, if yoy know how to make an efficient implementation like
the second one with an aligned storage I'll be happy to use it.

Fernando Cacciola

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to