Skip to content

Commit a9bd570

Browse files
N-Dekkerhjmjohnson
authored andcommitted
STYLE: More make_unique_for_overwrite, less delete[], on local variables
Replaced `new T[n]` with `make_unique_for_overwrite<T[]>(n)` calls, for the initialization of local variables in ITK library files (*.h, *.hxx), and removed the corresponding `delete[]` statements. Follow-up to pull request #3590 commit 15d09d6 "STYLE: Replace `new T[n]` with `make_unique_for_overwrite` in cxx files"
1 parent 68fea25 commit a9bd570

File tree

18 files changed

+110
-139
lines changed

18 files changed

+110
-139
lines changed

Modules/Core/Common/include/itkSymmetricEigenAnalysis.hxx

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define itkSymmetricEigenAnalysis_hxx
2020

2121
#include "itkMath.h"
22+
#include "itkMakeUniqueForOverwrite.h"
2223

2324
namespace itk
2425
{
@@ -56,11 +57,11 @@ template <typename TMatrix, typename TVector, typename TEigenMatrix>
5657
unsigned int
5758
SymmetricEigenAnalysis<TMatrix, TVector, TEigenMatrix>::ComputeEigenValuesLegacy(const TMatrix & A, TVector & D) const
5859
{
59-
auto * workArea1 = new double[m_Dimension];
60+
const auto workArea1 = make_unique_for_overwrite<double[]>(m_Dimension);
6061

6162
// Copy the input matrix
62-
auto * inputMatrix = new double[m_Dimension * m_Dimension];
63-
auto * dVector = new double[m_Dimension];
63+
const auto inputMatrix = make_unique_for_overwrite<double[]>(m_Dimension * m_Dimension);
64+
const auto dVector = make_unique_for_overwrite<double[]>(m_Dimension);
6465

6566
unsigned int k = 0;
6667

@@ -75,18 +76,14 @@ SymmetricEigenAnalysis<TMatrix, TVector, TEigenMatrix>::ComputeEigenValuesLegacy
7576
}
7677
}
7778

78-
this->ReduceToTridiagonalMatrix(inputMatrix, dVector, workArea1, workArea1);
79-
const unsigned int eigenErrIndex = this->ComputeEigenValuesUsingQL(dVector, workArea1);
79+
this->ReduceToTridiagonalMatrix(inputMatrix.get(), dVector.get(), workArea1.get(), workArea1.get());
80+
const unsigned int eigenErrIndex = this->ComputeEigenValuesUsingQL(dVector.get(), workArea1.get());
8081

8182
for (unsigned int i = 0; i < m_Dimension; ++i)
8283
{
8384
D[i] = dVector[i];
8485
}
8586

86-
delete[] dVector;
87-
delete[] workArea1;
88-
delete[] inputMatrix;
89-
9087
return eigenErrIndex; // index of eigenvalue that could not be computed
9188
}
9289

@@ -97,12 +94,12 @@ SymmetricEigenAnalysis<TMatrix, TVector, TEigenMatrix>::ComputeEigenValuesAndVec
9794
TVector & EigenValues,
9895
TEigenMatrix & EigenVectors) const
9996
{
100-
auto * workArea1 = new double[m_Dimension];
101-
auto * workArea2 = new double[m_Dimension * m_Dimension];
97+
const auto workArea1 = make_unique_for_overwrite<double[]>(m_Dimension);
98+
const auto workArea2 = make_unique_for_overwrite<double[]>(m_Dimension * m_Dimension);
10299

103100
// Copy the input matrix
104-
auto * inputMatrix = new double[m_Dimension * m_Dimension];
105-
auto * dVector = new double[m_Dimension];
101+
const auto inputMatrix = make_unique_for_overwrite<double[]>(m_Dimension * m_Dimension);
102+
const auto dVector = make_unique_for_overwrite<double[]>(m_Dimension);
106103

107104
unsigned int k = 0;
108105

@@ -118,9 +115,11 @@ SymmetricEigenAnalysis<TMatrix, TVector, TEigenMatrix>::ComputeEigenValuesAndVec
118115
}
119116
}
120117

121-
this->ReduceToTridiagonalMatrixAndGetTransformation(inputMatrix, dVector, workArea1, workArea2);
118+
this->ReduceToTridiagonalMatrixAndGetTransformation(
119+
inputMatrix.get(), dVector.get(), workArea1.get(), workArea2.get());
122120

123-
const unsigned int eigenErrIndex = this->ComputeEigenValuesAndVectorsUsingQL(dVector, workArea1, workArea2);
121+
const unsigned int eigenErrIndex =
122+
this->ComputeEigenValuesAndVectorsUsingQL(dVector.get(), workArea1.get(), workArea2.get());
124123

125124
// Copy eigenvectors
126125
k = 0;
@@ -133,11 +132,6 @@ SymmetricEigenAnalysis<TMatrix, TVector, TEigenMatrix>::ComputeEigenValuesAndVec
133132
}
134133
}
135134

136-
delete[] dVector;
137-
delete[] workArea2;
138-
delete[] workArea1;
139-
delete[] inputMatrix;
140-
141135
return eigenErrIndex; // index of eigenvalue that could not be computed
142136
}
143137

Modules/Filtering/DistanceMap/include/itkFastChamferDistanceImageFilter.hxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include "itkNeighborhoodIterator.h"
2424
#include "itkImageRegionIterator.h"
25+
#include "itkMakeUniqueForOverwrite.h"
2526

2627
namespace itk
2728
{
@@ -104,7 +105,7 @@ FastChamferDistanceImageFilter<TInputImage, TOutputImage>::GenerateDataND()
104105
NeighborhoodIterator<TInputImage> it(r, this->GetOutput(), m_RegionToProcess);
105106

106107
const unsigned int center_voxel = it.Size() / 2;
107-
auto * neighbor_type = new int[it.Size()];
108+
const auto neighbor_type = make_unique_for_overwrite<int[]>(it.Size());
108109
int i;
109110
unsigned int n;
110111
float val[ImageDimension];
@@ -263,7 +264,6 @@ FastChamferDistanceImageFilter<TInputImage, TOutputImage>::GenerateDataND()
263264
}
264265
}
265266
}
266-
delete[] neighbor_type;
267267
}
268268

269269
template <typename TInputImage, typename TOutputImage>

Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUScalarAnisotropicDiffusionFunction.hxx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "itkNeighborhoodInnerProduct.h"
2323
#include "itkNeighborhoodAlgorithm.h"
2424
#include "itkDerivativeOperator.h"
25+
#include "itkMakeUniqueForOverwrite.h"
2526

2627
namespace itk
2728
{
@@ -147,10 +148,10 @@ GPUScalarAnisotropicDiffusionFunction<TImage>::GPUCalculateAverageGradientMagnit
147148
kernelManager->LaunchKernel(kernelHandle, ImageDim, globalSize, localSize);
148149

149150
// Read back intermediate sums from GPU and compute final value
150-
double sum = 0;
151-
auto * intermSum = new float[bufferSize];
151+
double sum = 0;
152+
const auto intermSum = make_unique_for_overwrite<float[]>(bufferSize);
152153

153-
this->m_AnisotropicDiffusionFunctionGPUBuffer->SetCPUBufferPointer(intermSum);
154+
this->m_AnisotropicDiffusionFunctionGPUBuffer->SetCPUBufferPointer(intermSum.get());
154155
this->m_AnisotropicDiffusionFunctionGPUBuffer->SetCPUDirtyFlag(true); //
155156
// CPU
156157
// is
@@ -166,8 +167,6 @@ GPUScalarAnisotropicDiffusionFunction<TImage>::GPUCalculateAverageGradientMagnit
166167
}
167168

168169
this->SetAverageGradientMagnitudeSquared(static_cast<double>(sum / static_cast<double>(numPixel)));
169-
170-
delete[] intermSum;
171170
}
172171

173172
} // end namespace itk

Modules/Filtering/ImageCompare/include/itkSTAPLEImageFilter.hxx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define itkSTAPLEImageFilter_hxx
2020

2121
#include "itkImageScanlineIterator.h"
22+
#include "itkMakeUniqueForOverwrite.h"
2223

2324
namespace itk
2425
{
@@ -58,13 +59,13 @@ STAPLEImageFilter<TInputImage, TOutputImage>::GenerateData()
5859
// Record the number of input files.
5960
number_of_input_files = this->GetNumberOfIndexedInputs();
6061

61-
auto * D_it = new IteratorType[number_of_input_files];
62+
const auto D_it = make_unique_for_overwrite<IteratorType[]>(number_of_input_files);
6263

63-
auto * p = new double[number_of_input_files]; // sensitivity
64-
auto * q = new double[number_of_input_files]; // specificity
64+
const auto p = make_unique_for_overwrite<double[]>(number_of_input_files); // sensitivity
65+
const auto q = make_unique_for_overwrite<double[]>(number_of_input_files); // specificity
6566

66-
auto * last_q = new double[number_of_input_files];
67-
auto * last_p = new double[number_of_input_files];
67+
const auto last_q = make_unique_for_overwrite<double[]>(number_of_input_files);
68+
const auto last_p = make_unique_for_overwrite<double[]>(number_of_input_files);
6869

6970
for (i = 0; i < number_of_input_files; ++i)
7071
{
@@ -250,12 +251,6 @@ STAPLEImageFilter<TInputImage, TOutputImage>::GenerateData()
250251
m_Specificity.push_back(q[i]);
251252
}
252253
m_ElapsedIterations = iter;
253-
254-
delete[] q;
255-
delete[] p;
256-
delete[] last_q;
257-
delete[] last_p;
258-
delete[] D_it;
259254
}
260255
} // end namespace itk
261256

Modules/IO/MeshBase/include/itkMeshFileWriter.hxx

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
#include "itkMeshConvertPixelTraits.h"
2424
#include "itkMeshIOFactory.h"
2525
#include "itkObjectFactoryBase.h"
26+
#include "itkMakeUniqueForOverwrite.h"
2627

2728
#include "vnl/vnl_vector.h"
2829

30+
2931
namespace itk
3032
{
3133
template <typename TInputMesh>
@@ -248,10 +250,10 @@ MeshFileWriter<TInputMesh>::WritePoints()
248250

249251
itkDebugMacro(<< "Writing points: " << m_FileName);
250252
SizeValueType pointsBufferSize = input->GetNumberOfPoints() * TInputMesh::PointDimension;
251-
auto * buffer = new typename TInputMesh::PointType::ValueType[pointsBufferSize];
252-
CopyPointsToBuffer(buffer);
253-
m_MeshIO->WritePoints(buffer);
254-
delete[] buffer;
253+
using ValueType = typename TInputMesh::PointType::ValueType;
254+
const auto buffer = make_unique_for_overwrite<ValueType[]>(pointsBufferSize);
255+
CopyPointsToBuffer(buffer.get());
256+
m_MeshIO->WritePoints(buffer.get());
255257
}
256258

257259
template <typename TInputMesh>
@@ -261,10 +263,10 @@ MeshFileWriter<TInputMesh>::WriteCells()
261263
itkDebugMacro(<< "Writing cells: " << m_FileName);
262264

263265
SizeValueType cellsBufferSize = m_MeshIO->GetCellBufferSize();
264-
auto * buffer = new typename TInputMesh::PointIdentifier[cellsBufferSize];
265-
CopyCellsToBuffer(buffer);
266-
m_MeshIO->WriteCells(buffer);
267-
delete[] buffer;
266+
using PointIdentifierType = typename TInputMesh::PointIdentifier;
267+
const auto buffer = make_unique_for_overwrite<PointIdentifierType[]>(cellsBufferSize);
268+
CopyCellsToBuffer(buffer.get());
269+
m_MeshIO->WriteCells(buffer.get());
268270
}
269271

270272
template <typename TInputMesh>
@@ -282,10 +284,9 @@ MeshFileWriter<TInputMesh>::WritePointData()
282284
input->GetPointData()->Begin().Value());
283285

284286
using ValueType = typename itk::NumericTraits<typename TInputMesh::PixelType>::ValueType;
285-
auto * buffer = new ValueType[numberOfComponents];
286-
CopyPointDataToBuffer(buffer);
287-
m_MeshIO->WritePointData(buffer);
288-
delete[] buffer;
287+
const auto buffer = make_unique_for_overwrite<ValueType[]>(numberOfComponents);
288+
CopyPointDataToBuffer(buffer.get());
289+
m_MeshIO->WritePointData(buffer.get());
289290
}
290291
}
291292

@@ -304,10 +305,9 @@ MeshFileWriter<TInputMesh>::WriteCellData()
304305
input->GetCellData()->Begin().Value());
305306

306307
using ValueType = typename itk::NumericTraits<typename TInputMesh::CellPixelType>::ValueType;
307-
auto * buffer = new ValueType[numberOfComponents];
308-
CopyCellDataToBuffer(buffer);
309-
m_MeshIO->WriteCellData(buffer);
310-
delete[] buffer;
308+
const auto buffer = make_unique_for_overwrite<ValueType[]>(numberOfComponents);
309+
CopyCellDataToBuffer(buffer.get());
310+
m_MeshIO->WriteCellData(buffer.get());
311311
}
312312
}
313313

Modules/IO/MeshBase/include/itkMeshIOBase.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "itkVector.h"
3535
#include "itkNumberToString.h"
3636
#include "itkCommonEnums.h"
37+
#include "itkMakeUniqueForOverwrite.h"
3738

3839
#include <string>
3940
#include <complex>
@@ -686,23 +687,22 @@ class ITKIOMeshBase_EXPORT MeshIOBase : public LightProcessObject
686687
}
687688
else
688689
{
689-
auto * data = new TOutput[numberOfComponents];
690+
const auto data = make_unique_for_overwrite<TOutput[]>(numberOfComponents);
690691
for (SizeValueType ii = 0; ii < numberOfComponents; ++ii)
691692
{
692693
data[ii] = static_cast<TOutput>(buffer[ii]);
693694
}
694695

695696
if (m_ByteOrder == IOByteOrderEnum::BigEndian && itk::ByteSwapper<TOutput>::SystemIsLittleEndian())
696697
{
697-
itk::ByteSwapper<TOutput>::SwapRangeFromSystemToBigEndian(data, numberOfComponents);
698+
itk::ByteSwapper<TOutput>::SwapRangeFromSystemToBigEndian(data.get(), numberOfComponents);
698699
}
699700
else if (m_ByteOrder == IOByteOrderEnum::LittleEndian && itk::ByteSwapper<TOutput>::SystemIsBigEndian())
700701
{
701-
itk::ByteSwapper<TOutput>::SwapRangeFromSystemToLittleEndian(data, numberOfComponents);
702+
itk::ByteSwapper<TOutput>::SwapRangeFromSystemToLittleEndian(data.get(), numberOfComponents);
702703
}
703704

704-
outputFile.write(reinterpret_cast<char *>(data), numberOfComponents);
705-
delete[] data;
705+
outputFile.write(reinterpret_cast<char *>(data.get()), numberOfComponents);
706706
}
707707
}
708708

Modules/IO/MeshFreeSurfer/include/itkFreeSurferAsciiMeshIO.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "ITKIOMeshFreeSurferExport.h"
2222

2323
#include "itkMeshIOBase.h"
24+
#include "itkMakeUniqueForOverwrite.h"
2425

2526
#include <fstream>
2627

@@ -135,9 +136,9 @@ class ITKIOMeshFreeSurfer_EXPORT FreeSurferAsciiMeshIO : public MeshIOBase
135136
constexpr unsigned int numberOfCellPoints = 3;
136137
SizeValueType index = 0;
137138

138-
auto * data = new T[this->m_NumberOfCells * numberOfCellPoints];
139+
const auto data = make_unique_for_overwrite<T[]>(this->m_NumberOfCells * numberOfCellPoints);
139140

140-
ReadCellsBuffer(buffer, data);
141+
ReadCellsBuffer(buffer, data.get());
141142

142143
for (SizeValueType ii = 0; ii < this->m_NumberOfCells; ++ii)
143144
{
@@ -147,7 +148,6 @@ class ITKIOMeshFreeSurfer_EXPORT FreeSurferAsciiMeshIO : public MeshIOBase
147148
}
148149
outputFile << label << '\n';
149150
}
150-
delete[] data;
151151
}
152152

153153
/** Read cells from a data buffer, used when writting cells */

Modules/IO/MeshFreeSurfer/include/itkFreeSurferBinaryMeshIO.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "itkByteSwapper.h"
2424
#include "itkMeshIOBase.h"
2525
#include "itkIntTypes.h"
26+
#include "itkMakeUniqueForOverwrite.h"
2627

2728
#include <fstream>
2829

@@ -119,7 +120,7 @@ class ITKIOMeshFreeSurfer_EXPORT FreeSurferBinaryMeshIO : public MeshIOBase
119120
void
120121
WritePoints(T * buffer, std::ofstream & outputFile)
121122
{
122-
auto * data = new float[this->m_NumberOfPoints * this->m_PointDimension];
123+
const auto data = make_unique_for_overwrite<float[]>(this->m_NumberOfPoints * this->m_PointDimension);
123124

124125
for (SizeValueType ii = 0; ii < this->m_NumberOfPoints; ++ii)
125126
{
@@ -130,8 +131,7 @@ class ITKIOMeshFreeSurfer_EXPORT FreeSurferBinaryMeshIO : public MeshIOBase
130131
}
131132

132133
itk::ByteSwapper<float>::SwapWriteRangeFromSystemToBigEndian(
133-
data, this->m_NumberOfPoints * this->m_PointDimension, &outputFile);
134-
delete[] data;
134+
data.get(), this->m_NumberOfPoints * this->m_PointDimension, &outputFile);
135135
}
136136

137137
/** Write cells to utput stream */
@@ -141,13 +141,11 @@ class ITKIOMeshFreeSurfer_EXPORT FreeSurferBinaryMeshIO : public MeshIOBase
141141
{
142142
constexpr itk::uint32_t numberOfCellPoints = 3;
143143

144-
auto * data = new itk::uint32_t[this->m_NumberOfCells * numberOfCellPoints];
144+
const std::unique_ptr<itk::uint32_t[]> data(new itk::uint32_t[this->m_NumberOfCells * numberOfCellPoints]);
145145

146-
ReadCellsBuffer(buffer, data);
146+
ReadCellsBuffer(buffer, data.get());
147147
itk::ByteSwapper<itk::uint32_t>::SwapWriteRangeFromSystemToBigEndian(
148-
data, this->m_NumberOfCells * numberOfCellPoints, &outputFile);
149-
150-
delete[] data;
148+
data.get(), this->m_NumberOfCells * numberOfCellPoints, &outputFile);
151149
}
152150

153151
/** Read cells from a data buffer, used when writting mesh */
@@ -174,15 +172,14 @@ class ITKIOMeshFreeSurfer_EXPORT FreeSurferBinaryMeshIO : public MeshIOBase
174172
void
175173
WritePointData(T * buffer, std::ofstream & outputFile)
176174
{
177-
auto * data = new float[this->m_NumberOfPointPixels];
175+
const auto data = make_unique_for_overwrite<float[]>(this->m_NumberOfPointPixels);
178176

179177
for (SizeValueType ii = 0; ii < this->m_NumberOfPointPixels; ++ii)
180178
{
181179
data[ii] = static_cast<float>(buffer[ii]);
182180
}
183181

184-
itk::ByteSwapper<float>::SwapWriteRangeFromSystemToBigEndian(data, this->m_NumberOfPointPixels, &outputFile);
185-
delete[] data;
182+
itk::ByteSwapper<float>::SwapWriteRangeFromSystemToBigEndian(data.get(), this->m_NumberOfPointPixels, &outputFile);
186183
}
187184

188185
protected:

0 commit comments

Comments
 (0)