From b69b5acda34b42027efe5cde9b81c0d7b9cc8bd6 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Thu, 13 Aug 2015 17:09:52 +0200 Subject: [PATCH] FIX Segfault change from pointer to unique_ptr fixes segfault. --- ProcessLib/ProcessVariable.cpp | 16 ++-------------- ProcessLib/ProcessVariable.h | 14 +++++++------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp index 8495f5a2118..aac8b94016b 100644 --- a/ProcessLib/ProcessVariable.cpp +++ b/ProcessLib/ProcessVariable.cpp @@ -42,8 +42,7 @@ ProcessVariable::ProcessVariable( config.get<std::string>("initial_condition.type"); if (type == "Uniform") { - _initial_condition = - new UniformInitialCondition(ic_config->second); + _initial_condition.reset(new UniformInitialCondition(ic_config->second)); } else { @@ -96,17 +95,6 @@ ProcessVariable::ProcessVariable( } } -ProcessVariable::~ProcessVariable() -{ - delete _initial_condition; - - for(auto p : _dirichlet_bcs) - delete p; - - for(auto p : _neumann_bc_configs) - delete p; -} - std::string const& ProcessVariable::getName() const { return _name; @@ -121,7 +109,7 @@ void ProcessVariable::initializeDirichletBCs( MeshGeoToolsLib::MeshNodeSearcher& searcher, std::vector<std::size_t>& global_ids, std::vector<double>& values) { - for (UniformDirichletBoundaryCondition* bc : _dirichlet_bcs) + for (auto& bc : _dirichlet_bcs) bc->initialize(searcher, global_ids, values); } diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h index 7421eb48da5..47fc156d538 100644 --- a/ProcessLib/ProcessVariable.h +++ b/ProcessLib/ProcessVariable.h @@ -12,7 +12,8 @@ #include <boost/property_tree/ptree.hpp> - +#include "InitialCondition.h" +#include "UniformDirichletBoundaryCondition.h" #include "NeumannBc.h" namespace MeshGeoToolsLib @@ -46,12 +47,11 @@ namespace ProcessLib class ProcessVariable { using ConfigTree = boost::property_tree::ptree; + public: ProcessVariable(ConfigTree const& config, MeshLib::Mesh const& mesh, GeoLib::GEOObjects const& geometries); - ~ProcessVariable(); - std::string const& getName() const; /// Returns a mesh on which the process variable is defined. @@ -66,7 +66,7 @@ public: GlobalSetup const&, Args&&... args) { - for (NeumannBcConfig* config : _neumann_bc_configs) + for (auto& config : _neumann_bc_configs) { config->initialize(searcher); bcs = new NeumannBc<GlobalSetup>(*config, std::forward<Args>(args)...); @@ -76,9 +76,9 @@ public: private: std::string const _name; MeshLib::Mesh const& _mesh; - InitialCondition* _initial_condition; - std::vector<UniformDirichletBoundaryCondition*> _dirichlet_bcs; - std::vector<NeumannBcConfig*> _neumann_bc_configs; + std::unique_ptr<InitialCondition> _initial_condition; + std::vector<std::unique_ptr<UniformDirichletBoundaryCondition> > _dirichlet_bcs; + std::vector<std::unique_ptr<NeumannBcConfig> > _neumann_bc_configs; }; } // namespace ProcessLib -- GitLab