Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-02-24 16:40:10


"Philippe A. Bouchard" <philippeb_at_[hidden]> writes:

>> Can you really do anything to make this cleaner? I guess:
>>
>> aligned_storage<T> storage;
>> new (storage.bytes) T(x, y, z);
>>
>> might be a help. What else are you gaining? And how do you destroy
>> the T? If not explicitly and you don't have a "constructed" flag,
>> you're going to have exception-safety problems.
>
> Everything seems already defined ;)

???

> Given the fact optional<>::m_storage is aligned like a bool...:
>
> - Maybe aligned_storage<> should always destruct its object. It would be
> the user's responsability to construct the object before its destruction,
> otherwise the result would be undefined.

And if the object's constructor throws an exception, what then?

> - Maybe we could create 2 separate type lists if optional<> is used many
> times in the same object, gathering m_initialized types and m_storage in
> separate lists:
>
> struct A
> {
> optional<char> i; // bool alignment
> optional<short> l; // bool alignment
> optional<double> d; // bool alignment
> };
>
> Could be transformed into:
>
> struct A
> {
> typedef optional_typelist< typelist<char, short, double> >
> optional_members;
> typedef array<bool, optional_members::size> optional_inits;
>
> optional_inits init; // Array of booleans
> optional_members storage; // Typelist storage
> };
>
> In this example, optional_typelist<T1, T2, T3, ...> would be a list of
> optional<T1>, optional<T2>, optional<T3>, ...
>
> It could be simplified even more, but this is just a suggestion.

You're really a fiend for low-level optimizations, aren't you?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk