diff --git a/src/amdis/ProblemStat.inc.hpp b/src/amdis/ProblemStat.inc.hpp index b12361d2613a95e197e7213bb4bdbd6f12f0ddc8..163d9413c5fae1dee13723d7044b6d43f538e592 100644 --- a/src/amdis/ProblemStat.inc.hpp +++ b/src/amdis/ProblemStat.inc.hpp @@ -138,9 +138,9 @@ restore(Flag initFlag) // restore grid from file if (Dune::Capabilities::hasBackupRestoreFacilities<HostGrid>::v) - adoptGrid(Grid::instance(Dune::BackupRestoreFacility<HostGrid>::restore(grid_filename))); + adoptGrid(Grid::instance(std::unique_ptr<HostGrid>(Dune::BackupRestoreFacility<HostGrid>::restore(grid_filename)))); else - adoptGrid(Grid::instance(BackupRestoreByGridFactory<HostGrid>::restore(grid_filename))); + adoptGrid(Grid::instance(std::unique_ptr<HostGrid>(BackupRestoreByGridFactory<HostGrid>::restore(grid_filename)))); // create fespace if (initFlag.isSet(INIT_FE_SPACE) || initFlag.isSet(INIT_SYSTEM)) diff --git a/src/amdis/common/SharedPtr.hpp b/src/amdis/common/SharedPtr.hpp index 3cb9bffd796263f45007da801594ba893297657b..561fe5e457384b9a3b0edc523e2bb91fdc12924e 100644 --- a/src/amdis/common/SharedPtr.hpp +++ b/src/amdis/common/SharedPtr.hpp @@ -1,6 +1,7 @@ #pragma once #include <memory> +#include <type_traits> #include <utility> #include <dune/common/shared_ptr.hh> @@ -30,15 +31,10 @@ namespace AMDiS } template <class T> - std::shared_ptr<T> wrap_or_share(T*& t) + std::shared_ptr<T> wrap_or_share(T* t) { - return std::shared_ptr<T>(t, Dune::null_deleter<T>()); - } - - template <class T> - std::shared_ptr<T> wrap_or_share(T*&& t) - { - return std::shared_ptr<T>(t); + static_assert(not std::is_pointer<T*>::value, + "Raw pointers must be wrapped into smart pointers or references to clarify ownership"); } template <class T> @@ -48,13 +44,7 @@ namespace AMDiS } template <class T> - std::shared_ptr<T> wrap_or_share(std::unique_ptr<T>& t) - { - return std::shared_ptr<T>(t.get(), Dune::null_deleter<T>()); - } - - template <class T> - std::shared_ptr<T> wrap_or_share(std::unique_ptr<T>&& t) + std::shared_ptr<T> wrap_or_share(std::unique_ptr<T> t) { return std::shared_ptr<T>(std::move(t)); } diff --git a/test/ISTLCommTest.cpp b/test/ISTLCommTest.cpp index 1ef3d0e1644daa6eb956ac47381c85a7bae1e5ec..c2cdcb858b29d2a5ecc56c31a05730c546070d70 100644 --- a/test/ISTLCommTest.cpp +++ b/test/ISTLCommTest.cpp @@ -75,8 +75,7 @@ int main(int argc, char** argv) int ovlp = 1; { - auto hostGrid = std::make_unique<YaspGrid2d>(lower2d, upper2d, nElements2d, std::bitset<2>(), - ovlp); + YaspGrid2d hostGrid(lower2d, upper2d, nElements2d, std::bitset<2>(), ovlp); auto grid = AdaptiveGrid<YaspGrid2d>::instance(hostGrid); auto l1 = LagrangeBasis<YaspGrid2d, 1>::create(grid->leafGridView()); @@ -86,8 +85,7 @@ int main(int argc, char** argv) AMDIS_TEST(test(th, "Yasp2d_TH_Ovlp")); } { - auto hostGrid = std::make_unique<YaspGrid3d>(lower3d, upper3d, nElements3d, std::bitset<3>(), - ovlp); + YaspGrid3d hostGrid(lower3d, upper3d, nElements3d, std::bitset<3>(), ovlp); auto grid = AdaptiveGrid<YaspGrid3d>::instance(hostGrid); auto l1 = LagrangeBasis<YaspGrid3d, 1>::create(grid->leafGridView());