From 29905507577858d04a0effbceba7d31fd2f1ecd8 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Mon, 14 Nov 2011 09:04:23 +0100
Subject: [PATCH] Use a shared pointer

---
 dune/tectonic/localnonlinearity.hh | 4 ++--
 dune/tectonic/myblockproblem.hh    | 3 +--
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/dune/tectonic/localnonlinearity.hh b/dune/tectonic/localnonlinearity.hh
index 195dbe7d..fbdd6325 100644
--- a/dune/tectonic/localnonlinearity.hh
+++ b/dune/tectonic/localnonlinearity.hh
@@ -18,7 +18,7 @@ template <int dimension> class LocalNonlinearity {
   typedef FieldVector<double, dimension> VectorType;
   typedef FieldMatrix<double, dimension, dimension> MatrixType;
 
-  LocalNonlinearity(NiceFunction const *func) : func_(func) {}
+  LocalNonlinearity(Dune::shared_ptr<NiceFunction> &func) : func_(func) {}
 
   double operator()(VectorType const x) const {
     double ret;
@@ -63,7 +63,7 @@ template <int dimension> class LocalNonlinearity {
   }
 
 private:
-  NiceFunction const *func_;
+  Dune::shared_ptr<NiceFunction> &func_;
 };
 }
 #endif
diff --git a/dune/tectonic/myblockproblem.hh b/dune/tectonic/myblockproblem.hh
index 3b4a8ff5..ed34b4f8 100644
--- a/dune/tectonic/myblockproblem.hh
+++ b/dune/tectonic/myblockproblem.hh
@@ -113,14 +113,13 @@ class MyBlockProblem<MyConvexProblemTypeTEMPLATE>::IterateObject {
       }
       assert(localA != NULL);
 
-      auto const f = problem.phi.restriction(m);
+      Dune::shared_ptr<Dune::NiceFunction> f(problem.phi.restriction(m));
       Dune::LocalNonlinearity<block_size> const phi(f);
       Dune::SampleFunctional<block_size> localJ(*localA, localb, phi,
                                                 ignore_component);
 
       LocalVectorType correction;
       Dune::minimise(localJ, ui, 5, bisection); // FIXME: hardcoded value
-      free(f);
     }
   }
 
-- 
GitLab