@@ -37,8 +37,6 @@ ImageToImageMetric<TFixedImage, TMovingImage>::ImageToImageMetric()
3737 m_MovingImage (nullptr )
3838 , // has to be provided by the user.
3939 m_Transform(nullptr )
40- , // has to be provided by the user.
41- m_ThreaderTransform(nullptr )
4240 , // constructed at initialization.
4341 m_Interpolator(nullptr )
4442 , // metric computes gradient by default
@@ -55,13 +53,11 @@ ImageToImageMetric<TFixedImage, TMovingImage>::ImageToImageMetric()
5553 , m_BSplineParametersOffset()
5654 , m_BSplineTransformWeights()
5755 , m_BSplineTransformIndices()
58- , m_ThreaderBSplineTransformWeights(nullptr )
59- , m_ThreaderBSplineTransformIndices(nullptr )
6056 , m_BSplineInterpolator(nullptr )
6157 , m_DerivativeCalculator(nullptr )
6258 , m_Threader(MultiThreaderType::New())
6359{
64- m_ConstSelfWrapper = new ConstantPointerWrapper (this );
60+ m_ConstSelfWrapper = std::make_unique< ConstantPointerWrapper> (this );
6561 this ->m_NumberOfWorkUnits = this ->m_Threader ->GetNumberOfWorkUnits ();
6662
6763 /* if 100% backward compatible, we should include this...but...
@@ -75,23 +71,6 @@ ImageToImageMetric<TFixedImage, TMovingImage>::ImageToImageMetric()
7571 */
7672}
7773
78- template <typename TFixedImage, typename TMovingImage>
79- ImageToImageMetric<TFixedImage, TMovingImage>::~ImageToImageMetric ()
80- {
81- delete m_ConstSelfWrapper;
82-
83- delete[] m_ThreaderNumberOfMovingImageSamples;
84- m_ThreaderNumberOfMovingImageSamples = nullptr ;
85-
86- delete[] m_ThreaderTransform;
87- m_ThreaderTransform = nullptr ;
88-
89- delete[] this ->m_ThreaderBSplineTransformWeights ;
90- this ->m_ThreaderBSplineTransformWeights = nullptr ;
91-
92- delete[] this ->m_ThreaderBSplineTransformIndices ;
93- this ->m_ThreaderBSplineTransformIndices = nullptr ;
94- }
9574
9675/* *
9776 * Set the number of work units. This will be clamped by the
@@ -333,12 +312,10 @@ ImageToImageMetric<TFixedImage, TMovingImage>::MultiThreadingInitialize()
333312{
334313 this ->SetNumberOfWorkUnits (m_NumberOfWorkUnits);
335314
336- delete[] m_ThreaderNumberOfMovingImageSamples;
337- m_ThreaderNumberOfMovingImageSamples = new unsigned int [m_NumberOfWorkUnits - 1 ];
315+ m_ThreaderNumberOfMovingImageSamples.reset (new unsigned int [m_NumberOfWorkUnits - 1 ]);
338316
339317 // Allocate the array of transform clones to be used in every thread
340- delete[] m_ThreaderTransform;
341- m_ThreaderTransform = new TransformPointer[m_NumberOfWorkUnits - 1 ];
318+ m_ThreaderTransform.reset (new TransformPointer[m_NumberOfWorkUnits - 1 ]);
342319 for (ThreadIdType ithread = 0 ; ithread < m_NumberOfWorkUnits - 1 ; ++ithread)
343320 {
344321 this ->m_ThreaderTransform [ithread] = this ->m_Transform ->Clone ();
@@ -438,11 +415,8 @@ ImageToImageMetric<TFixedImage, TMovingImage>::MultiThreadingInitialize()
438415 this ->m_BSplinePreTransformPointsArray .resize (1 );
439416 this ->m_WithinBSplineSupportRegionArray .resize (1 );
440417
441- delete[] this ->m_ThreaderBSplineTransformWeights ;
442- this ->m_ThreaderBSplineTransformWeights = nullptr ;
443-
444- delete[] this ->m_ThreaderBSplineTransformIndices ;
445- this ->m_ThreaderBSplineTransformIndices = nullptr ;
418+ this ->m_ThreaderBSplineTransformWeights .reset ();
419+ this ->m_ThreaderBSplineTransformIndices .reset ();
446420
447421 if (this ->m_UseCachingOfBSplineWeights )
448422 {
@@ -455,8 +429,8 @@ ImageToImageMetric<TFixedImage, TMovingImage>::MultiThreadingInitialize()
455429 }
456430 else
457431 {
458- this ->m_ThreaderBSplineTransformWeights = new BSplineTransformWeightsType[m_NumberOfWorkUnits - 1 ];
459- this ->m_ThreaderBSplineTransformIndices = new BSplineTransformIndexArrayType[m_NumberOfWorkUnits - 1 ];
432+ this ->m_ThreaderBSplineTransformWeights . reset ( new BSplineTransformWeightsType[m_NumberOfWorkUnits - 1 ]) ;
433+ this ->m_ThreaderBSplineTransformIndices . reset ( new BSplineTransformIndexArrayType[m_NumberOfWorkUnits - 1 ]) ;
460434 }
461435
462436 for (unsigned int j = 0 ; j < FixedImageDimension; ++j)
@@ -1084,7 +1058,7 @@ ImageToImageMetric<TFixedImage, TMovingImage>::GetValueMultiThreadedInitiate() c
10841058{
10851059 this ->SynchronizeTransforms ();
10861060
1087- m_Threader->SetSingleMethod (GetValueMultiThreaded, static_cast <void *>(m_ConstSelfWrapper));
1061+ m_Threader->SetSingleMethod (GetValueMultiThreaded, static_cast <void *>(m_ConstSelfWrapper. get () ));
10881062 m_Threader->SingleMethodExecute ();
10891063
10901064 for (ThreadIdType threadId = 0 ; threadId < m_NumberOfWorkUnits - 1 ; ++threadId)
@@ -1097,7 +1071,7 @@ template <typename TFixedImage, typename TMovingImage>
10971071void
10981072ImageToImageMetric<TFixedImage, TMovingImage>::GetValueMultiThreadedPostProcessInitiate() const
10991073{
1100- m_Threader->SetSingleMethod (GetValueMultiThreadedPostProcess, static_cast <void *>(m_ConstSelfWrapper));
1074+ m_Threader->SetSingleMethod (GetValueMultiThreadedPostProcess, static_cast <void *>(m_ConstSelfWrapper. get () ));
11011075 m_Threader->SingleMethodExecute ();
11021076}
11031077
@@ -1189,7 +1163,7 @@ ImageToImageMetric<TFixedImage, TMovingImage>::GetValueAndDerivativeMultiThreade
11891163{
11901164 this ->SynchronizeTransforms ();
11911165
1192- m_Threader->SetSingleMethod (GetValueAndDerivativeMultiThreaded, static_cast <void *>(m_ConstSelfWrapper));
1166+ m_Threader->SetSingleMethod (GetValueAndDerivativeMultiThreaded, static_cast <void *>(m_ConstSelfWrapper. get () ));
11931167 m_Threader->SingleMethodExecute ();
11941168
11951169 for (ThreadIdType threadId = 0 ; threadId < m_NumberOfWorkUnits - 1 ; ++threadId)
@@ -1202,7 +1176,8 @@ template <typename TFixedImage, typename TMovingImage>
12021176void
12031177ImageToImageMetric<TFixedImage, TMovingImage>::GetValueAndDerivativeMultiThreadedPostProcessInitiate() const
12041178{
1205- m_Threader->SetSingleMethod (GetValueAndDerivativeMultiThreadedPostProcess, static_cast <void *>(m_ConstSelfWrapper));
1179+ m_Threader->SetSingleMethod (GetValueAndDerivativeMultiThreadedPostProcess,
1180+ static_cast <void *>(m_ConstSelfWrapper.get ()));
12061181 m_Threader->SingleMethodExecute ();
12071182}
12081183
0 commit comments