Subject: Re: [boost] [optional] memory use for optional refs and ptrs
From: Christopher Jefferson (chris_at_[hidden])
Date: 2010-10-05 10:37:24
On 5 Oct 2010, at 15:11, Sebastian Redl wrote:
> On 05.10.2010 15:54, Krzysztof Czainski wrote:
>> 2010/10/5 John Reid<j.reid_at_[hidden]>
>>> Rutger ter Borg wrote:
>>>> I'm looking into boost::optional<> as a replacement for some of my code
>>>> which has to deal with optional values. However, it seems that cases which
>>>> are usually space-efficient optionals (e.g., ptrs in the form of a null-ptr)
>>>> do not have template specializations. In other words, boost optional
>>>> templates store a bool and the memory footprint of its template parameter,
>>>> regardless of type. I.e., optional references and pointers take their space
>>>> plus the space of an extra bool.
>>>> Is there a reason for this?
>>>> Might someone want to store a null pointer in the optional? I'm not sure
>>> about the references though.
>> I understand, that a null pointer means the same as lack of a pointer.
> In your use case.
> The idea has been discussed on the list before, and IIRC, the conclusion was that the library simply cannot rely on the user not wanting to have a null pointer in an optional.
> I could see a trait for optional specifying if a type has a natural empty value, and if so, which.
Yes, for example while NULL is a sensible pointer to store, I decided I would never want to represent (void*)1, so I specialised boost::optional to use that. It is also possible to come up with impossible states for most standard library objects (std::vector, std::list) if you know how they are stored internally. However I'm not sure such code could be submitted to boost.
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk