[gdal-dev] OGRGeometry copy constructor

Even Rouault even.rouault at spatialys.com
Fri Jun 5 08:46:20 PDT 2015


Simon,

> Looking at the code of GDAL 2.0 (but also 1.x), I noticed that the
> OGRGeometry class (and the derived classes) do not respects the Rule of 3
> : there is a destructor and no copy constructor or assignment operator.

Indeed, the Rule of 3 is not currently really implemented in the C++ API.

> It
> seems to me that this may lead to memory leaks on OGRSpatialReference (for
> example when using std::vector<OGRPoint> and not std::vector<OGRPoint*>).
> This is not an issue when using the C API because the clone() method is
> used. Am I well understanding the API ?
> 
> Various solutions exists:
> 1) defines private copy constructors and assignment operators (eg. libkml
> does this with a macro on each class: LIBKML_DISALLOW_EVIL_CONSTRUCTORS)
> 2) implements these methods, and manage poSRS the same way that clone() 
> does. 3) do nothing (and document it somewhere)
> 
> If needed I may open an issue and/or send a patch.

Option 2 looks good to me if you want to prepare a patch for it. Test cases in 
autotest/cpp/test_ogr.cpp would be appreciated.

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list