diff --git a/Core/Computation/MainComputation.cpp b/Core/Computation/MainComputation.cpp index a1f5329ab64328488d3fb1aa755e3005ffda175f..ef9ed089894cc4fc206a5afb131f5145871e5474 100644 --- a/Core/Computation/MainComputation.cpp +++ b/Core/Computation/MainComputation.cpp @@ -45,25 +45,22 @@ MainComputation::MainComputation( for (size_t i=0; i<nLayers; ++i) { const Layer* layer = mP_multi_layer->getLayer(i); for (size_t j=0; j<layer->getNumberOfLayouts(); ++j) - m_computation_terms.push_back( + m_computation_terms.emplace_back( new ParticleLayoutComputation(mP_multi_layer.get(), mP_fresnel_map.get(), layer->getLayout(j), i, m_sim_options, polarized)); } // scattering from rough surfaces in DWBA if (mP_multi_layer->hasRoughness()) - m_computation_terms.push_back(new RoughMultiLayerComputation(mP_multi_layer.get(), + m_computation_terms.emplace_back(new RoughMultiLayerComputation(mP_multi_layer.get(), mP_fresnel_map.get())); if (m_sim_options.includeSpecular()) - m_computation_terms.push_back(new SpecularComputation(mP_multi_layer.get(), + m_computation_terms.emplace_back(new SpecularComputation(mP_multi_layer.get(), mP_fresnel_map.get())); } MainComputation::~MainComputation() -{ - for (IComputationTerm* comp: m_computation_terms) - delete comp; -} +{} void MainComputation::run() { @@ -85,7 +82,7 @@ void MainComputation::run() void MainComputation::runProtected() { // add intensity of all IComputationTerms: - for (const IComputationTerm* comp: m_computation_terms) { + for (auto& comp: m_computation_terms) { if (!m_progress->alive()) return; comp->eval(m_progress, m_begin_it, m_end_it ); diff --git a/Core/Computation/MainComputation.h b/Core/Computation/MainComputation.h index 1b60f5843872b2f8efd624b48fe9940532a55707..53472e6f15b81cc9e9405a69bb63dae056c6571c 100644 --- a/Core/Computation/MainComputation.h +++ b/Core/Computation/MainComputation.h @@ -67,7 +67,7 @@ private: //! contains the information, necessary to calculate the Fresnel coefficients std::unique_ptr<IFresnelMap> mP_fresnel_map; - std::vector<IComputationTerm*> m_computation_terms; + std::vector<std::unique_ptr<IComputationTerm>> m_computation_terms; ComputationStatus m_status; };