I'm not sure if this is the same as the sentinel value you mentioned, but what about introducing a no-op region type and returning that? I'm thinking a null object pattern which would no-op and then nobody should need to check if nullptr.
Thanks, David On Tue, Oct 10, 2017 at 10:27 AM, Jacob Barrett <jbarr...@pivotal.io> wrote: > Looking at a class like Region (Region.cpp) there are calls to get the > parent region and sub regions, there are instances where a Region will not > have a parent or subs. The current API returns shared_ptr that may be > nullptr or a Region. > > Since we are trying to make an effort towards values over pointers should > be considered some changes here? Obviously a reference is out of the > question because it can't be null. A value is really out of the question > too since it can't be null and making a sentinel value is not a great > solution. Raw pointers are fine since they can be nullptr but make > ownership ambiguous. Using shared_ptr is good since it can be nullptr and > solves the ownership problem. Another option is to embrace the forthcoming > std::optional available as boost::optional in C++11. > > I am leaning towards keeping it shared_ptr since using boost::optional > would require users compile with boost. I don't think we should have > anything on our API that is not ours of C++11. Requiring third party > libraries to compile against our API doesn't fly right by me. > > Thoughts? >