I see you have three nice options here,

1. Return a shared_ptr.
2. Return a reference and throw exception for invalid indexes.
3. Return an optional.

I think all three of them are nice and safe.

emre

> I have a class A that holds a container of objects of type B indexed by int
> for e.g.
>
> Typically, I have a function of A
>
> class A {
> public:
>    const B& getB(int  <index> ) const;
> private:
>   std::map< int, shared_ptr<B> > listOfBs_;
> };
>
> The implementation of getB could be
>
> const B& A::getB(int <index> ) const
> {
>    //what to do if index not found
> }
>
> A number of solutions I think of:
>
> 1.
> boost::optional<const B&> getB(int <index> ) const
> {
> }
>
>
> 2.
> change signature to
> const B* getB(int <index> ) const
>
>
> 3.
> Define a
> static const B notFoundB;
> const B& A::getB(int <index> ) const
> returns notFoundB when not found and have API users compare return value
> with notFoundB
>
>
> I suppose the cheapest in overhead/performance is 2... optional must have
> some  time overhead?
>
> Are there advised solutions? Favourites in terms of style?
>
> Regards,