From 14faa95720568407d1da60407c2dc7afe7ed67be Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 20 Sep 2024 14:57:49 +0200 Subject: [PATCH] appslib: enable -Weffc++ --- apps/CMakeLists.txt | 2 +- apps/gdal_footprint_lib.cpp | 4 +++- apps/gdal_grid_lib.cpp | 2 ++ apps/gdal_utils_priv.h | 10 +++++----- apps/gdalargumentparser.h | 11 ++++++++++- apps/gdalbuildvrt_lib.cpp | 2 ++ apps/gdaldem_lib.cpp | 8 ++++++-- apps/gdalinfo_lib.cpp | 2 +- apps/gdaltindex_lib.cpp | 2 ++ apps/gdalwarp_lib.cpp | 2 ++ apps/ogr2ogr_lib.cpp | 35 +++++++++++++++++++++-------------- apps/ogrinfo_lib.cpp | 2 +- 12 files changed, 56 insertions(+), 26 deletions(-) diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 4ce116ae1b01..3b4b5386dcb4 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -25,7 +25,7 @@ add_library( add_dependencies(appslib generate_gdal_version_h) target_sources(${GDAL_LIB_TARGET_NAME} PRIVATE $) gdal_standard_includes(appslib) -target_compile_options(appslib PRIVATE ${GDAL_CXX_WARNING_FLAGS} ${WFLAG_OLD_STYLE_CAST}) +target_compile_options(appslib PRIVATE ${GDAL_CXX_WARNING_FLAGS} ${WFLAG_OLD_STYLE_CAST} ${WFLAG_EFFCXX}) target_include_directories( appslib PRIVATE $ $ $ $) diff --git a/apps/gdal_footprint_lib.cpp b/apps/gdal_footprint_lib.cpp index bbf5ae51b98b..2567212fad92 100644 --- a/apps/gdal_footprint_lib.cpp +++ b/apps/gdal_footprint_lib.cpp @@ -123,7 +123,7 @@ struct GDALFootprintOptions /*! Whether to force writing absolute paths in location field. */ bool bAbsolutePath = false; - std::string osSrcNoData; + std::string osSrcNoData{}; }; static std::unique_ptr GDALFootprintAppOptionsGetParser( @@ -295,6 +295,8 @@ class GDALFootprintMaskBand final : public GDALRasterBand { GDALRasterBand *m_poSrcBand = nullptr; + CPL_DISALLOW_COPY_ASSIGN(GDALFootprintMaskBand) + public: explicit GDALFootprintMaskBand(GDALRasterBand *poSrcBand) : m_poSrcBand(poSrcBand) diff --git a/apps/gdal_grid_lib.cpp b/apps/gdal_grid_lib.cpp index 1531f6d1ebca..304f61117149 100644 --- a/apps/gdal_grid_lib.cpp +++ b/apps/gdal_grid_lib.cpp @@ -116,6 +116,8 @@ struct GDALGridOptions &l_pOptions); pOptions.reset(l_pOptions); } + + CPL_DISALLOW_COPY_ASSIGN(GDALGridOptions) }; /************************************************************************/ diff --git a/apps/gdal_utils_priv.h b/apps/gdal_utils_priv.h index 7814c26babeb..aa509a6c36df 100644 --- a/apps/gdal_utils_priv.h +++ b/apps/gdal_utils_priv.h @@ -58,10 +58,10 @@ struct GDALInfoOptionsForBinary struct GDALDEMProcessingOptionsForBinary { - std::string osProcessing; - std::string osSrcFilename; - std::string osColorFilename; - std::string osDstFilename; + std::string osProcessing{}; + std::string osSrcFilename{}; + std::string osColorFilename{}; + std::string osDstFilename{}; bool bQuiet = false; }; @@ -83,7 +83,7 @@ struct GDALVectorTranslateOptionsForBinary std::string osDestDataSource{}; bool bQuiet = false; CPLStringList aosOpenOptions{}; - std::string osFormat; + std::string osFormat{}; GDALVectorTranslateAccessMode eAccessMode = ACCESS_CREATION; bool bShowUsageIfError = false; diff --git a/apps/gdalargumentparser.h b/apps/gdalargumentparser.h index d72b69083f98..9f4df4f80eb5 100644 --- a/apps/gdalargumentparser.h +++ b/apps/gdalargumentparser.h @@ -45,8 +45,17 @@ #pragma warning(disable : 4702) #endif +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Weffc++" +#endif + #include "argparse/argparse.hpp" +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + #ifdef _MSC_VER #pragma warning(pop) #endif @@ -156,7 +165,7 @@ class GDALArgumentParser : public ArgumentParser private: std::map::iterator find_argument(const std::string &name); - std::vector> aoSubparsers; + std::vector> aoSubparsers{}; std::string m_osExtraUsageHint{}; }; diff --git a/apps/gdalbuildvrt_lib.cpp b/apps/gdalbuildvrt_lib.cpp index 31e720fcc866..ee51213dfebd 100644 --- a/apps/gdalbuildvrt_lib.cpp +++ b/apps/gdalbuildvrt_lib.cpp @@ -279,6 +279,8 @@ class VRTBuilder void CreateVRTSeparate(VRTDatasetH hVRTDS); void CreateVRTNonSeparate(VRTDatasetH hVRTDS); + CPL_DISALLOW_COPY_ASSIGN(VRTBuilder) + public: VRTBuilder(bool bStrictIn, const char *pszOutputFilename, int nInputFiles, const char *const *ppszInputFilenames, GDALDatasetH *pahSrcDSIn, diff --git a/apps/gdaldem_lib.cpp b/apps/gdaldem_lib.cpp index c42bd152ec5f..3bce49466324 100644 --- a/apps/gdaldem_lib.cpp +++ b/apps/gdaldem_lib.cpp @@ -158,7 +158,7 @@ using namespace gdal::GDALDEM; struct GDALDEMProcessingOptions { /*! output format. Use the short format name. */ - std::string osFormat; + std::string osFormat{}; /*! the progress function to use */ GDALProgressFunc pfnProgress = nullptr; @@ -184,7 +184,7 @@ struct GDALDEMProcessingOptions bool bCombined = false; bool bIgor = false; bool bMultiDirectional = false; - CPLStringList aosCreationOptions; + CPLStringList aosCreationOptions{}; int nBand = 1; }; @@ -1972,6 +1972,8 @@ class GDALColorReliefDataset : public GDALDataset int nCurBlockXOff; int nCurBlockYOff; + CPL_DISALLOW_COPY_ASSIGN(GDALColorReliefDataset) + public: GDALColorReliefDataset(GDALDatasetH hSrcDS, GDALRasterBandH hSrcBand, const char *pszColorFilename, @@ -2565,6 +2567,8 @@ template class GDALGeneric3x3Dataset : public GDALDataset int nCurLine; bool bComputeAtEdges; + CPL_DISALLOW_COPY_ASSIGN(GDALGeneric3x3Dataset) + public: GDALGeneric3x3Dataset(GDALDatasetH hSrcDS, GDALRasterBandH hSrcBand, GDALDataType eDstDataType, int bDstHasNoData, diff --git a/apps/gdalinfo_lib.cpp b/apps/gdalinfo_lib.cpp index e61ef39ff8e5..63d86d11acf1 100644 --- a/apps/gdalinfo_lib.cpp +++ b/apps/gdalinfo_lib.cpp @@ -135,7 +135,7 @@ struct GDALInfoOptions /*! report metadata for the specified domains. "all" can be used to report metadata in all domains. */ - CPLStringList aosExtraMDDomains; + CPLStringList aosExtraMDDomains{}; /*! WKT format used for SRS */ std::string osWKTFormat = "WKT2"; diff --git a/apps/gdaltindex_lib.cpp b/apps/gdaltindex_lib.cpp index 7101a7d6ba0b..e544afd636bd 100644 --- a/apps/gdaltindex_lib.cpp +++ b/apps/gdaltindex_lib.cpp @@ -387,6 +387,8 @@ struct GDALTileIndexTileIterator int iCurSrc = 0; VSIDIR *psDir = nullptr; + CPL_DISALLOW_COPY_ASSIGN(GDALTileIndexTileIterator) + GDALTileIndexTileIterator(const GDALTileIndexOptions *psOptionsIn, int nSrcCountIn, const char *const *papszSrcDSNamesIn) diff --git a/apps/gdalwarp_lib.cpp b/apps/gdalwarp_lib.cpp index 53fa14271b03..84c400887eb6 100644 --- a/apps/gdalwarp_lib.cpp +++ b/apps/gdalwarp_lib.cpp @@ -4868,6 +4868,8 @@ static GDALDatasetH GDALWarpCreateOutput( class CutlineTransformer : public OGRCoordinateTransformation { + CPL_DISALLOW_COPY_ASSIGN(CutlineTransformer) + public: void *hSrcImageTransformer = nullptr; diff --git a/apps/ogr2ogr_lib.cpp b/apps/ogr2ogr_lib.cpp index 28866b20c7d5..911882beeb7f 100644 --- a/apps/ogr2ogr_lib.cpp +++ b/apps/ogr2ogr_lib.cpp @@ -133,6 +133,8 @@ struct CopyableGCPs CPLFree(pasGCPs); } } + + CopyableGCPs &operator=(const CopyableGCPs &) = delete; }; } // namespace gdal::ogr2ogr_lib @@ -433,7 +435,7 @@ struct GDALVectorTranslateOptions whose geometry intersects the extents will be selected. The geometries will not be clipped unless GDALVectorTranslateOptions::bClipSrc is true. */ - std::shared_ptr poSpatialFilter; + std::shared_ptr poSpatialFilter{}; /*! the progress function to use */ GDALProgressFunc pfnProgress = nullptr; @@ -743,15 +745,17 @@ typedef struct class OGRSplitListFieldLayer : public OGRLayer { - OGRLayer *poSrcLayer; - OGRFeatureDefn *poFeatureDefn; - ListFieldDesc *pasListFields; - int nListFieldCount; - int nMaxSplitListSubFields; + OGRLayer *poSrcLayer = nullptr; + OGRFeatureDefn *poFeatureDefn = nullptr; + ListFieldDesc *pasListFields = nullptr; + int nListFieldCount = 0; + const int nMaxSplitListSubFields; std::unique_ptr TranslateFeature(std::unique_ptr poSrcFeature); + CPL_DISALLOW_COPY_ASSIGN(OGRSplitListFieldLayer) + public: OGRSplitListFieldLayer(OGRLayer *poSrcLayer, int nMaxSplitListSubFields); virtual ~OGRSplitListFieldLayer(); @@ -826,8 +830,7 @@ class OGRSplitListFieldLayer : public OGRLayer OGRSplitListFieldLayer::OGRSplitListFieldLayer(OGRLayer *poSrcLayerIn, int nMaxSplitListSubFieldsIn) - : poSrcLayer(poSrcLayerIn), poFeatureDefn(nullptr), pasListFields(nullptr), - nListFieldCount(0), + : poSrcLayer(poSrcLayerIn), nMaxSplitListSubFields( nMaxSplitListSubFieldsIn < 0 ? INT_MAX : nMaxSplitListSubFieldsIn) { @@ -1569,15 +1572,17 @@ class GDALVectorTranslateWrappedDataset : public GDALDataset std::unique_ptr m_poDriverToFree{}; GDALDataset *m_poBase = nullptr; OGRSpatialReference *m_poOutputSRS = nullptr; - bool m_bTransform = false; + const bool m_bTransform = false; std::vector> m_apoLayers{}; - std::vector> m_apoHiddenLayers; + std::vector> m_apoHiddenLayers{}; GDALVectorTranslateWrappedDataset(GDALDataset *poBase, OGRSpatialReference *poOutputSRS, bool bTransform); + CPL_DISALLOW_COPY_ASSIGN(GDALVectorTranslateWrappedDataset) + public: virtual int GetLayerCount() override { @@ -1605,6 +1610,8 @@ class GDALVectorTranslateWrappedLayer : public OGRLayerDecorator std::unique_ptr TranslateFeature(std::unique_ptr poSrcFeat); + CPL_DISALLOW_COPY_ASSIGN(GDALVectorTranslateWrappedLayer) + public: virtual ~GDALVectorTranslateWrappedLayer(); @@ -1849,12 +1856,12 @@ void GDALVectorTranslateWrappedDataset::ReleaseResultSet(OGRLayer *poResultsSet) class OGR2OGRSpatialReferenceHolder { - OGRSpatialReference *m_poSRS; + OGRSpatialReference *m_poSRS = nullptr; + + CPL_DISALLOW_COPY_ASSIGN(OGR2OGRSpatialReferenceHolder) public: - OGR2OGRSpatialReferenceHolder() : m_poSRS(nullptr) - { - } + OGR2OGRSpatialReferenceHolder() = default; ~OGR2OGRSpatialReferenceHolder() { diff --git a/apps/ogrinfo_lib.cpp b/apps/ogrinfo_lib.cpp index b227370ddbb9..03c91a7f3b9b 100644 --- a/apps/ogrinfo_lib.cpp +++ b/apps/ogrinfo_lib.cpp @@ -55,7 +55,7 @@ struct GDALVectorInfoOptions GDALVectorInfoFormat eFormat = FORMAT_TEXT; std::string osWHERE{}; CPLStringList aosLayers{}; - std::unique_ptr poSpatialFilter; + std::unique_ptr poSpatialFilter{}; bool bAllLayers = false; std::string osSQLStatement{}; std::string osDialect{};