From 7211d4a62bbdab4b60c8c7544ca1699a43443044 Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Mon, 5 Sep 2022 17:17:06 +0200 Subject: [PATCH] STYLE: Make unique_ptr by make_unique_for_overwrite, instead of new T[] Initialized existing `unique_ptr` variables by `make_unique_for_overwrite`, instead of by `new T[]`, using the following regular expression in Visual Studio: - Find: `std::unique_ptr<(.+)\[\]> (\w+)\(new \1\[(.+)\]\);` - Replace with: `auto $2 = make_unique_for_overwrite<$1[]>($3);` Aims to make code of previous `unique_ptr` use cases consistent with more recent commits, including: pull request https://github.com/InsightSoftwareConsortium/ITK/pull/3596 commit a9bd57036c8ee3bb7325332ccd8b80c99e6375ae "STYLE: More make_unique_for_overwrite, less delete[], on local variables" --- .../Core/Common/include/itkByteSwapper.hxx | 7 ++--- .../itkTriangleMeshCurvatureCalculator.hxx | 8 +++--- .../itkRecursiveSeparableImageFilter.hxx | 8 +++--- .../include/itkBinShrinkImageFilter.hxx | 6 ++--- Modules/IO/HDF5/src/itkHDF5ImageIO.cxx | 23 ++++++++-------- .../ImageBase/include/itkImageFileReader.hxx | 6 ++--- Modules/IO/MINC/src/itkMINCImageIO.cxx | 8 +++--- .../IO/MeshBase/include/itkMeshFileReader.hxx | 26 +++++++++---------- .../include/itkFreeSurferBinaryMeshIO.h | 2 +- Modules/IO/PNG/src/itkPNGImageIO.cxx | 9 ++++--- .../TransformHDF5/src/itkHDF5TransformIO.cxx | 9 ++++--- 11 files changed, 57 insertions(+), 55 deletions(-) diff --git a/Modules/Core/Common/include/itkByteSwapper.hxx b/Modules/Core/Common/include/itkByteSwapper.hxx index 80560df0461..d1929c34c81 100644 --- a/Modules/Core/Common/include/itkByteSwapper.hxx +++ b/Modules/Core/Common/include/itkByteSwapper.hxx @@ -27,6 +27,7 @@ *=========================================================================*/ #ifndef itkByteSwapper_hxx #define itkByteSwapper_hxx +#include "itkMakeUniqueForOverwrite.h" #include // For swap. #include #include @@ -301,7 +302,7 @@ ByteSwapper::SwapWrite2Range(const void * ptr, BufferSizeType num, OStreamTyp { chunkSize = num; } - const std::unique_ptr cpy(new char[chunkSize * 2]); + const auto cpy = make_unique_for_overwrite(chunkSize * 2); while (num) { memcpy(cpy.get(), ptr, chunkSize * 2); @@ -355,7 +356,7 @@ ByteSwapper::SwapWrite4Range(const void * ptr, BufferSizeType num, OStreamTyp { chunkSize = num; } - const std::unique_ptr cpy(new char[chunkSize * 4]); + const auto cpy = make_unique_for_overwrite(chunkSize * 4); while (num) { @@ -412,7 +413,7 @@ ByteSwapper::SwapWrite8Range(const void * ptr, BufferSizeType num, OStreamTyp { chunkSize = num; } - const std::unique_ptr cpy(new char[chunkSize * 8]); + const auto cpy = make_unique_for_overwrite(chunkSize * 8); while (num) { diff --git a/Modules/Core/Mesh/include/itkTriangleMeshCurvatureCalculator.hxx b/Modules/Core/Mesh/include/itkTriangleMeshCurvatureCalculator.hxx index e236f4f837a..5d817300c93 100644 --- a/Modules/Core/Mesh/include/itkTriangleMeshCurvatureCalculator.hxx +++ b/Modules/Core/Mesh/include/itkTriangleMeshCurvatureCalculator.hxx @@ -30,7 +30,7 @@ #ifndef itkTriangleMeshCurvatureCalculator_hxx #define itkTriangleMeshCurvatureCalculator_hxx -#include // For unique_ptr +#include "itkMakeUniqueForOverwrite.h" #include "itkObjectFactory.h" #include "itkMath.h" #include "vnl/vnl_cross.h" @@ -81,9 +81,9 @@ TriangleMeshCurvatureCalculator::ComputeGaussCurvature(const InputMe const unsigned int numberOfPoints = inputMesh->GetNumberOfPoints(); - const std::unique_ptr K(new double[numberOfPoints]); - const std::unique_ptr dA(new double[numberOfPoints]); - double pi2 = itk::Math::twopi; + const auto K = make_unique_for_overwrite(numberOfPoints); + const auto dA = make_unique_for_overwrite(numberOfPoints); + double pi2 = itk::Math::twopi; for (unsigned int k = 0; k < numberOfPoints; ++k) { K[k] = pi2; diff --git a/Modules/Filtering/ImageFilterBase/include/itkRecursiveSeparableImageFilter.hxx b/Modules/Filtering/ImageFilterBase/include/itkRecursiveSeparableImageFilter.hxx index 9842bd3f7d3..725eee78a75 100644 --- a/Modules/Filtering/ImageFilterBase/include/itkRecursiveSeparableImageFilter.hxx +++ b/Modules/Filtering/ImageFilterBase/include/itkRecursiveSeparableImageFilter.hxx @@ -20,7 +20,7 @@ #include "itkObjectFactory.h" #include "itkImageLinearIteratorWithIndex.h" -#include // For unique_ptr +#include "itkMakeUniqueForOverwrite.h" namespace itk { @@ -281,9 +281,9 @@ RecursiveSeparableImageFilter::DynamicThreadedGenerat const SizeValueType ln = region.GetSize(this->m_Direction); - const std::unique_ptr inps(new RealType[ln]); - const std::unique_ptr outs(new RealType[ln]); - const std::unique_ptr scratch(new RealType[ln]); + const auto inps = make_unique_for_overwrite(ln); + const auto outs = make_unique_for_overwrite(ln); + const auto scratch = make_unique_for_overwrite(ln); inputIterator.GoToBegin(); outputIterator.GoToBegin(); diff --git a/Modules/Filtering/ImageGrid/include/itkBinShrinkImageFilter.hxx b/Modules/Filtering/ImageGrid/include/itkBinShrinkImageFilter.hxx index a85205fa0a0..3b82be5d741 100644 --- a/Modules/Filtering/ImageGrid/include/itkBinShrinkImageFilter.hxx +++ b/Modules/Filtering/ImageGrid/include/itkBinShrinkImageFilter.hxx @@ -20,8 +20,8 @@ #include "itkImageScanlineIterator.h" #include "itkTotalProgressReporter.h" +#include "itkMakeUniqueForOverwrite.h" -#include // For unique_ptr. #include #include @@ -141,8 +141,8 @@ BinShrinkImageFilter::DynamicThreadedGenerateData( } // allocate accumulate line - const size_t ln = outputRegionForThread.GetSize(0); - const std::unique_ptr accBuffer(new AccumulatePixelType[ln]); + const size_t ln = outputRegionForThread.GetSize(0); + const auto accBuffer = make_unique_for_overwrite(ln); // convert the shrink factor for convenient multiplication typename TOutputImage::SizeType factorSize; diff --git a/Modules/IO/HDF5/src/itkHDF5ImageIO.cxx b/Modules/IO/HDF5/src/itkHDF5ImageIO.cxx index f7a59b47da3..5fb1f057001 100644 --- a/Modules/IO/HDF5/src/itkHDF5ImageIO.cxx +++ b/Modules/IO/HDF5/src/itkHDF5ImageIO.cxx @@ -21,6 +21,7 @@ #include "itkArray.h" #include "itksys/SystemTools.hxx" #include "itk_H5Cpp.h" +#include "itkMakeUniqueForOverwrite.h" #include @@ -482,8 +483,8 @@ HDF5ImageIO ::WriteDirections(const std::string & path, const std::vector buf(new double[dim[0] * dim[1]]); - unsigned int k(0); + const auto buf = make_unique_for_overwrite(dim[0] * dim[1]); + unsigned int k(0); for (unsigned int i = 0; i < dim[1]; ++i) { for (unsigned int j = 0; j < dim[0]; ++j) @@ -520,7 +521,7 @@ HDF5ImageIO ::ReadDirections(const std::string & path) H5::FloatType dirType = dirSet.getFloatType(); if (dirType.getSize() == sizeof(double)) { - const std::unique_ptr buf(new double[dim[0] * dim[1]]); + const auto buf = make_unique_for_overwrite(dim[0] * dim[1]); dirSet.read(buf.get(), H5::PredType::NATIVE_DOUBLE); int k = 0; for (unsigned int i = 0; i < dim[1]; ++i) @@ -534,7 +535,7 @@ HDF5ImageIO ::ReadDirections(const std::string & path) } else { - const std::unique_ptr buf(new float[dim[0] * dim[1]]); + const auto buf = make_unique_for_overwrite(dim[0] * dim[1]); dirSet.read(buf.get(), H5::PredType::NATIVE_FLOAT); int k = 0; for (unsigned int i = 0; i < dim[1]; ++i) @@ -728,8 +729,8 @@ HDF5ImageIO ::ReadImageInformation() // by comparing the size of the Directions matrix with the // reported # of dimensions in the voxel dataset { - hsize_t nDims = imageSpace.getSimpleExtentNdims(); - const std::unique_ptr Dims(new hsize_t[nDims]); + hsize_t nDims = imageSpace.getSimpleExtentNdims(); + const auto Dims = make_unique_for_overwrite(nDims); imageSpace.getSimpleExtentDims(Dims.get()); if (nDims > this->GetNumberOfDimensions()) { @@ -925,9 +926,9 @@ HDF5ImageIO ::SetupStreaming(H5::DataSpace * imageSpace, H5::DataSpace * slabSpa const int HDFDim(this->GetNumberOfDimensions() + (numComponents > 1 ? 1 : 0)); - const std::unique_ptr offset(new hsize_t[HDFDim]); - const std::unique_ptr HDFSize(new hsize_t[HDFDim]); - const int limit = regionToRead.GetImageDimension(); + const auto offset = make_unique_for_overwrite(HDFDim); + const auto HDFSize = make_unique_for_overwrite(HDFDim); + const int limit = regionToRead.GetImageDimension(); // // fastest moving dimension is intra-voxel // index @@ -1066,7 +1067,7 @@ HDF5ImageIO ::WriteImageInformation() int numDims = this->GetNumberOfDimensions(); // HDF5 dimensions listed slowest moving first, ITK are fastest // moving first. - std::unique_ptr dims(new hsize_t[numDims + (numComponents == 1 ? 0 : 1)]); + auto dims = make_unique_for_overwrite(numDims + (numComponents == 1 ? 0 : 1)); for (int i(0), j(numDims - 1); i < numDims; i++, j--) { @@ -1278,7 +1279,7 @@ HDF5ImageIO ::Write(const void * buffer) int numDims = this->GetNumberOfDimensions(); // HDF5 dimensions listed slowest moving first, ITK are fastest // moving first. - const std::unique_ptr dims(new hsize_t[numDims + (numComponents == 1 ? 0 : 1)]); + const auto dims = make_unique_for_overwrite(numDims + (numComponents == 1 ? 0 : 1)); for (int i(0), j(numDims - 1); i < numDims; i++, j--) { diff --git a/Modules/IO/ImageBase/include/itkImageFileReader.hxx b/Modules/IO/ImageBase/include/itkImageFileReader.hxx index f6db1dfa997..d167f66cbda 100644 --- a/Modules/IO/ImageBase/include/itkImageFileReader.hxx +++ b/Modules/IO/ImageBase/include/itkImageFileReader.hxx @@ -26,7 +26,7 @@ #include "itkMetaDataObject.h" #include "itksys/SystemTools.hxx" -#include // For unique_ptr +#include "itkMakeUniqueForOverwrite.h" #include namespace itk @@ -399,7 +399,7 @@ ImageFileReader::GenerateData() << ConvertPixelTraits::GetNumberOfComponents() << " m_ImageIO->NumComponents " << m_ImageIO->GetNumberOfComponents()); - const std::unique_ptr loadBuffer(new char[sizeOfActualIORegion]); + const auto loadBuffer = make_unique_for_overwrite(sizeOfActualIORegion); m_ImageIO->Read(static_cast(loadBuffer.get())); // See note below as to why the buffered region is needed and @@ -417,7 +417,7 @@ ImageFileReader::GenerateData() OutputImagePixelType * outputBuffer = output->GetPixelContainer()->GetBufferPointer(); - const std::unique_ptr loadBuffer(new char[sizeOfActualIORegion]); + const auto loadBuffer = make_unique_for_overwrite(sizeOfActualIORegion); m_ImageIO->Read(static_cast(loadBuffer.get())); // we use std::copy_n here as it should be optimized to memcpy for diff --git a/Modules/IO/MINC/src/itkMINCImageIO.cxx b/Modules/IO/MINC/src/itkMINCImageIO.cxx index 9b978491348..73ac52bbfa3 100644 --- a/Modules/IO/MINC/src/itkMINCImageIO.cxx +++ b/Modules/IO/MINC/src/itkMINCImageIO.cxx @@ -104,8 +104,8 @@ MINCImageIO::Read(void * buffer) const unsigned int nDims = this->GetNumberOfDimensions(); const unsigned int nComp = this->GetNumberOfComponents(); - const std::unique_ptr start(new misize_t[nDims + (nComp > 1 ? 1 : 0)]); - const std::unique_ptr count(new misize_t[nDims + (nComp > 1 ? 1 : 0)]); + const auto start = make_unique_for_overwrite(nDims + (nComp > 1 ? 1 : 0)); + const auto count = make_unique_for_overwrite(nDims + (nComp > 1 ? 1 : 0)); for (unsigned int i = 0; i < nDims; ++i) { @@ -1363,8 +1363,8 @@ MINCImageIO::Write(const void * buffer) const unsigned int nComp = this->GetNumberOfComponents(); size_t buffer_length = 1; - const std::unique_ptr start(new misize_t[nDims + (nComp > 1 ? 1 : 0)]); - const std::unique_ptr count(new misize_t[nDims + (nComp > 1 ? 1 : 0)]); + const auto start = make_unique_for_overwrite(nDims + (nComp > 1 ? 1 : 0)); + const auto count = make_unique_for_overwrite(nDims + (nComp > 1 ? 1 : 0)); for (unsigned int i = 0; i < nDims; ++i) { diff --git a/Modules/IO/MeshBase/include/itkMeshFileReader.hxx b/Modules/IO/MeshBase/include/itkMeshFileReader.hxx index b64ed0d76c5..5fc54284b19 100644 --- a/Modules/IO/MeshBase/include/itkMeshFileReader.hxx +++ b/Modules/IO/MeshBase/include/itkMeshFileReader.hxx @@ -27,9 +27,9 @@ #include "itkPixelTraits.h" #include "itksys/SystemTools.hxx" +#include "itkMakeUniqueForOverwrite.h" #include -#include // For unique_ptr. namespace itk { @@ -346,8 +346,8 @@ MeshFileReader::Re { typename TOutputMesh::Pointer output = this->GetOutput(); - const std::unique_ptr outputPointDataBuffer( - new OutputPointPixelType[m_MeshIO->GetNumberOfPointPixels()]); + const auto outputPointDataBuffer = + make_unique_for_overwrite(m_MeshIO->GetNumberOfPointPixels()); if ((m_MeshIO->GetPointPixelComponentType() != MeshIOBase::MapComponentType::CType) || @@ -362,10 +362,9 @@ MeshFileReader::Re << "ConvertPointPixelTraits::NumberOfComponents " << ConvertPointPixelTraits::GetNumberOfComponents() << " m_MeshIO->NumberOfComponents " << m_MeshIO->GetNumberOfPointPixelComponents()); - const std::unique_ptr inputPointDataBuffer( - new char[m_MeshIO->GetNumberOfPointPixelComponents() * - m_MeshIO->GetComponentSize(m_MeshIO->GetPointPixelComponentType()) * - m_MeshIO->GetNumberOfPointPixels()]); + const auto inputPointDataBuffer = make_unique_for_overwrite( + m_MeshIO->GetNumberOfPointPixelComponents() * m_MeshIO->GetComponentSize(m_MeshIO->GetPointPixelComponentType()) * + m_MeshIO->GetNumberOfPointPixels()); m_MeshIO->ReadPointData(static_cast(inputPointDataBuffer.get())); this->ConvertPointPixelBuffer( @@ -389,8 +388,7 @@ MeshFileReader::Re { typename TOutputMesh::Pointer output = this->GetOutput(); - const std::unique_ptr outputCellDataBuffer( - new OutputCellPixelType[m_MeshIO->GetNumberOfCellPixels()]); + const auto outputCellDataBuffer = make_unique_for_overwrite(m_MeshIO->GetNumberOfCellPixels()); if ((m_MeshIO->GetCellPixelComponentType() != MeshIOBase::MapComponentType::CType) || @@ -405,9 +403,9 @@ MeshFileReader::Re << "ConvertCellPixelTraits::NumberOfComponents " << ConvertCellPixelTraits::GetNumberOfComponents() << " m_MeshIO->NumberOfComponents " << m_MeshIO->GetNumberOfCellPixelComponents()); - const std::unique_ptr inputCellDataBuffer( - new char[m_MeshIO->GetNumberOfCellPixelComponents() * - m_MeshIO->GetComponentSize(m_MeshIO->GetCellPixelComponentType()) * m_MeshIO->GetNumberOfCellPixels()]); + const auto inputCellDataBuffer = make_unique_for_overwrite( + m_MeshIO->GetNumberOfCellPixelComponents() * m_MeshIO->GetComponentSize(m_MeshIO->GetCellPixelComponentType()) * + m_MeshIO->GetNumberOfCellPixels()); m_MeshIO->ReadCellData(static_cast(inputCellDataBuffer.get())); this->ConvertCellPixelBuffer( @@ -825,7 +823,7 @@ template void MeshFileReader::ReadPointsUsingMeshIO() { - const std::unique_ptr buffer(new T[m_MeshIO->GetNumberOfPoints() * OutputPointDimension]); + const auto buffer = make_unique_for_overwrite(m_MeshIO->GetNumberOfPoints() * OutputPointDimension); m_MeshIO->ReadPoints(buffer.get()); Self::ReadPoints(buffer.get()); } @@ -836,7 +834,7 @@ template void MeshFileReader::ReadCellsUsingMeshIO() { - const std::unique_ptr buffer(new T[m_MeshIO->GetCellBufferSize()]); + const auto buffer = make_unique_for_overwrite(m_MeshIO->GetCellBufferSize()); m_MeshIO->ReadCells(buffer.get()); Self::ReadCells(buffer.get()); } diff --git a/Modules/IO/MeshFreeSurfer/include/itkFreeSurferBinaryMeshIO.h b/Modules/IO/MeshFreeSurfer/include/itkFreeSurferBinaryMeshIO.h index 87a737e7756..48fc269c537 100644 --- a/Modules/IO/MeshFreeSurfer/include/itkFreeSurferBinaryMeshIO.h +++ b/Modules/IO/MeshFreeSurfer/include/itkFreeSurferBinaryMeshIO.h @@ -141,7 +141,7 @@ class ITKIOMeshFreeSurfer_EXPORT FreeSurferBinaryMeshIO : public MeshIOBase { constexpr itk::uint32_t numberOfCellPoints = 3; - const std::unique_ptr data(new itk::uint32_t[this->m_NumberOfCells * numberOfCellPoints]); + const auto data = make_unique_for_overwrite(this->m_NumberOfCells * numberOfCellPoints); ReadCellsBuffer(buffer, data.get()); itk::ByteSwapper::SwapWriteRangeFromSystemToBigEndian( diff --git a/Modules/IO/PNG/src/itkPNGImageIO.cxx b/Modules/IO/PNG/src/itkPNGImageIO.cxx index e2fc78b2a2a..514a163d1a8 100644 --- a/Modules/IO/PNG/src/itkPNGImageIO.cxx +++ b/Modules/IO/PNG/src/itkPNGImageIO.cxx @@ -18,6 +18,7 @@ #include "itkPNGImageIO.h" #include "itk_png.h" #include "itksys/SystemTools.hxx" +#include "itkMakeUniqueForOverwrite.h" #include #include @@ -233,9 +234,9 @@ PNGImageIO::Read(void * buffer) // update the info now that we have defined the filters png_read_update_info(png_ptr, info_ptr); - auto rowbytes = static_cast(png_get_rowbytes(png_ptr, info_ptr)); - auto * tempImage = static_cast(buffer); - const std::unique_ptr row_pointers(new png_bytep[height]); + auto rowbytes = static_cast(png_get_rowbytes(png_ptr, info_ptr)); + auto * tempImage = static_cast(buffer); + const auto row_pointers = make_unique_for_overwrite(height); for (unsigned int ui = 0; ui < height; ++ui) { row_pointers[ui] = tempImage + rowbytes * ui; @@ -681,7 +682,7 @@ PNGImageIO::WriteSlice(const std::string & fileName, const void * const buffer) png_set_swap(png_ptr); #endif } - const std::unique_ptr row_pointers(new png_bytep[height]); + const auto row_pointers = make_unique_for_overwrite(height); { const int rowInc = width * numComp * bitDepth / 8; diff --git a/Modules/IO/TransformHDF5/src/itkHDF5TransformIO.cxx b/Modules/IO/TransformHDF5/src/itkHDF5TransformIO.cxx index 21be95cd5c3..3afeb22b29a 100644 --- a/Modules/IO/TransformHDF5/src/itkHDF5TransformIO.cxx +++ b/Modules/IO/TransformHDF5/src/itkHDF5TransformIO.cxx @@ -24,6 +24,7 @@ #include "itkCompositeTransform.h" #include "itkCompositeTransformIOHelper.h" #include "itkVersion.h" +#include "itkMakeUniqueForOverwrite.h" #include namespace itk @@ -183,7 +184,7 @@ HDF5TransformIOTemplate::ReadParameters(const std::string if (ParamType.getSize() == sizeof(double)) { - const std::unique_ptr buf(new double[dim]); + const auto buf = make_unique_for_overwrite(dim); paramSet.read(buf.get(), H5::PredType::NATIVE_DOUBLE); for (unsigned int i = 0; i < dim; ++i) { @@ -192,7 +193,7 @@ HDF5TransformIOTemplate::ReadParameters(const std::string } else { - const std::unique_ptr buf(new float[dim]); + const auto buf = make_unique_for_overwrite(dim); paramSet.read(buf.get(), H5::PredType::NATIVE_FLOAT); for (unsigned int i = 0; i < dim; ++i) { @@ -230,7 +231,7 @@ HDF5TransformIOTemplate::ReadFixedParameters(const std::st if (ParamType.getSize() == sizeof(double)) { - const std::unique_ptr buf(new double[dim]); + const auto buf = make_unique_for_overwrite(dim); paramSet.read(buf.get(), H5::PredType::NATIVE_DOUBLE); for (unsigned int i = 0; i < dim; ++i) { @@ -239,7 +240,7 @@ HDF5TransformIOTemplate::ReadFixedParameters(const std::st } else { - const std::unique_ptr buf(new float[dim]); + const auto buf = make_unique_for_overwrite(dim); paramSet.read(buf.get(), H5::PredType::NATIVE_FLOAT); for (unsigned int i = 0; i < dim; ++i) {