Default names should be shorter to make small string optimization more likely.
GridPointDataSet() does not accept a Courier. The day may come when there are possible errors.
Data vector sizes are not checked for consistency with grid. In debug, out-of-bounds exceptions occur. In release, nothing. All possible consistency checks should be done during initialization.
A more convenient argument order for constructors would be xxxx( name, courier *, blah blah blah). Pass nullptr to get default courier. Motivation: get name and in general error handling are ALWAYS needed (no "real" application would use the default courier). Putting courier at the end means args must be provided where defaults could have been used.
Add RGI parent pointers to subobjects. Would allow full context (both RGI and subobject) to be included in error messages.
Still too much copying. Make it possible to use caller's data directly, no copying.
A case could be made that there are too many constructors. Modest convenience at the cost of confusion. Define a single API and live with it. Simplifies testing.
Change g format in error messages so moderately sized values do not use exponential form.
Probably more to come.