diff --git a/dune/solvers/iterationsteps/obstacletnnmgstep.hh b/dune/solvers/iterationsteps/obstacletnnmgstep.hh index 09e2db71ede931b1b27d5314f01c2bf6a00bb6b9..009ffcf32d8eb1dba487645cf42c419baf2b697f 100644 --- a/dune/solvers/iterationsteps/obstacletnnmgstep.hh +++ b/dune/solvers/iterationsteps/obstacletnnmgstep.hh @@ -67,7 +67,7 @@ class ObstacleTNNMGStep typedef typename Dune::BitSetVector<VectorType::block_type::dimension> BitVector; typedef MultigridTransfer<Vector, BitVector, Matrix> Transfer; - typedef typename std::vector<Transfer*> TransferPointerVector; + typedef typename std::vector<std::shared_ptr<Transfer>> TransferPointerVector; protected: diff --git a/dune/solvers/test/multigridtest.cc b/dune/solvers/test/multigridtest.cc index d387649ef0b828b09dacb934eb5595ae7475bbde..ea5fa69b75d1fd9ee298f36de27747ee70ea6373 100644 --- a/dune/solvers/test/multigridtest.cc +++ b/dune/solvers/test/multigridtest.cc @@ -55,10 +55,13 @@ struct MultigridTestSuite typedef MultigridTransfer<Vector, BitVector, Matrix> Transfer; typedef CompressedMultigridTransfer<Vector, BitVector, Matrix> TransferImplementation; - // create transfer operators from level i to i+1 (note that this will only work for either uniformly refined grids or adaptive grids with RefinementType=COPY) - std::vector<Transfer> transfer(grid.maxLevel()); - for (size_t i = 0; i < transfer.size(); ++i) { - transfer[i].setup(grid, i, i+1); + std::vector<std::shared_ptr<Transfer>> transfer(grid.maxLevel()); + for (size_t i = 0; i < transfer.size(); ++i) + { + // create transfer operators from level i to i+1 (note that this will only work for either uniformly refined grids or adaptive grids with RefinementType=COPY) + auto t = std::make_shared<TransferImplementation>(); + t->setup(grid, i, i+1); + transfer[i] = t; } // set up smoothers and basesolver diff --git a/dune/solvers/test/obstacletnnmgtest.cc b/dune/solvers/test/obstacletnnmgtest.cc index d7a55e48f0244f9a92d5d227269b4b96050482e9..23858a85b5d310297d36d13fc1a9a1d043c7d16c 100644 --- a/dune/solvers/test/obstacletnnmgtest.cc +++ b/dune/solvers/test/obstacletnnmgtest.cc @@ -53,12 +53,11 @@ void solveObstacleProblemByTNNMG(const GridType& grid, const MatrixType& mat, Ve const int blockSize = VectorType::block_type::dimension; - // we need a vector of pointers to the transfer operator base class - std::vector<Transfer*> transfer(grid.maxLevel()); + std::vector<std::shared_ptr<Transfer>> transfer(grid.maxLevel()); for (size_t i = 0; i < transfer.size(); ++i) { - // create transfer operator from level i to i+1 - TransferImplementation* t = new TransferImplementation; + // create transfer operators from level i to i+1 + auto t = std::make_shared<TransferImplementation>(); t->setup(grid, i, i+1); transfer[i] = t; }