Make Problem movable. Add a default move constructor and move assignment operator. https://github.com/ceres-solver/ceres-solver/issues/528 Change-Id: I16ecf367a800fde564c29e2b824cd4fb44111366
diff --git a/include/ceres/problem.h b/include/ceres/problem.h index 278d80f..a4a6c8f 100644 --- a/include/ceres/problem.h +++ b/include/ceres/problem.h
@@ -189,8 +189,11 @@ // invocation Problem(Problem::Options()). Problem(); explicit Problem(const Options& options); + Problem(Problem&&) = default; + Problem& operator=(Problem&&) = default; + Problem(const Problem&) = delete; - void operator=(const Problem&) = delete; + Problem& operator=(const Problem&) = delete; ~Problem();
diff --git a/internal/ceres/problem_test.cc b/internal/ceres/problem_test.cc index 038600c..b779524 100644 --- a/internal/ceres/problem_test.cc +++ b/internal/ceres/problem_test.cc
@@ -122,6 +122,24 @@ } }; + +TEST(Problem, MoveConstructor) { + Problem src; + double x; + src.AddParameterBlock(&x, 1); + Problem dst(std::move(src)); + EXPECT_TRUE(dst.HasParameterBlock(&x)); +} + +TEST(Problem, MoveAssignment) { + Problem src; + double x; + src.AddParameterBlock(&x, 1); + Problem dst; + dst = std::move(src); + EXPECT_TRUE(dst.HasParameterBlock(&x)); +} + TEST(Problem, AddResidualWithNullCostFunctionDies) { double x[3], y[4], z[5];