Drop trivial special members
Do not define trivial constructors or destructors unless necessary
(e.g., for implementing pimpl) following the rule of zero. Define
virtual base class destructors out-of-line to avoid emitting vtables in
every translation unit.
Change-Id: Iea2d8978e62a8ee5a97b86cbb4e858d56e0fb274
diff --git a/include/ceres/autodiff_first_order_function.h b/include/ceres/autodiff_first_order_function.h
index fa63785..4ace559 100644
--- a/include/ceres/autodiff_first_order_function.h
+++ b/include/ceres/autodiff_first_order_function.h
@@ -110,7 +110,6 @@
static_assert(kNumParameters > 0, "kNumParameters must be positive");
}
- ~AutoDiffFirstOrderFunction() override = default;
bool Evaluate(const double* const parameters,
double* cost,
diff --git a/include/ceres/autodiff_local_parameterization.h b/include/ceres/autodiff_local_parameterization.h
index aadee81..76e22ed 100644
--- a/include/ceres/autodiff_local_parameterization.h
+++ b/include/ceres/autodiff_local_parameterization.h
@@ -114,7 +114,6 @@
explicit AutoDiffLocalParameterization(Functor* functor)
: functor_(functor) {}
- ~AutoDiffLocalParameterization() override = default;
bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const override {
diff --git a/include/ceres/autodiff_manifold.h b/include/ceres/autodiff_manifold.h
index fa326ac..462fcde 100644
--- a/include/ceres/autodiff_manifold.h
+++ b/include/ceres/autodiff_manifold.h
@@ -152,7 +152,6 @@
// Takes ownership of functor.
explicit AutoDiffManifold(Functor* functor) : functor_(functor) {}
- ~AutoDiffManifold() override = default;
int AmbientSize() const override { return kAmbientSize; }
int TangentSize() const override { return kTangentSize; }
diff --git a/include/ceres/context.h b/include/ceres/context.h
index e22df7e..ab42bfe 100644
--- a/include/ceres/context.h
+++ b/include/ceres/context.h
@@ -31,6 +31,8 @@
#ifndef CERES_PUBLIC_CONTEXT_H_
#define CERES_PUBLIC_CONTEXT_H_
+#include "ceres/internal/port.h"
+
namespace ceres {
// A global context for processing data in Ceres. This provides a mechanism to
@@ -39,13 +41,13 @@
// Problems, either serially or in parallel. When using it with multiple
// Problems at the same time, they may end up contending for resources
// (e.g. threads) managed by the Context.
-class Context {
+class CERES_EXPORT_INTERNAL Context {
public:
- Context() = default;
+ Context();
Context(const Context&) = delete;
void operator=(const Context&) = delete;
- virtual ~Context() = default;
+ virtual ~Context();
// Creates a context object and the caller takes ownership.
static Context* Create();
diff --git a/include/ceres/cost_function.h b/include/ceres/cost_function.h
index 7e0f2cc..a904a2b 100644
--- a/include/ceres/cost_function.h
+++ b/include/ceres/cost_function.h
@@ -63,11 +63,11 @@
// when added with AddResidualBlock().
class CERES_EXPORT CostFunction {
public:
- CostFunction() : num_residuals_(0) {}
+ CostFunction();
CostFunction(const CostFunction&) = delete;
void operator=(const CostFunction&) = delete;
- virtual ~CostFunction() = default;
+ virtual ~CostFunction();
// Inputs:
//
diff --git a/include/ceres/dynamic_cost_function.h b/include/ceres/dynamic_cost_function.h
index 4d0c2bc..069ad59 100644
--- a/include/ceres/dynamic_cost_function.h
+++ b/include/ceres/dynamic_cost_function.h
@@ -40,7 +40,6 @@
// parameter blocks and set the number of residuals at run time.
class CERES_EXPORT DynamicCostFunction : public CostFunction {
public:
- ~DynamicCostFunction() override = default;
virtual void AddParameterBlock(int size) {
mutable_parameter_block_sizes()->push_back(size);
diff --git a/include/ceres/evaluation_callback.h b/include/ceres/evaluation_callback.h
index 2ff7c47..b7c52cf 100644
--- a/include/ceres/evaluation_callback.h
+++ b/include/ceres/evaluation_callback.h
@@ -62,7 +62,7 @@
// execute faster.
class CERES_EXPORT EvaluationCallback {
public:
- virtual ~EvaluationCallback() = default;
+ virtual ~EvaluationCallback();
// Called before Ceres requests residuals or jacobians for a given setting of
// the parameters. User parameters (the double* values provided to the cost
diff --git a/include/ceres/first_order_function.h b/include/ceres/first_order_function.h
index eb66c5a..7b92cd0 100644
--- a/include/ceres/first_order_function.h
+++ b/include/ceres/first_order_function.h
@@ -39,7 +39,7 @@
// and its gradient.
class CERES_EXPORT FirstOrderFunction {
public:
- virtual ~FirstOrderFunction() = default;
+ virtual ~FirstOrderFunction();
// cost is never null. gradient may be null. The return value
// indicates whether the evaluation was successful or not.
diff --git a/include/ceres/iteration_callback.h b/include/ceres/iteration_callback.h
index d52d466..488c015 100644
--- a/include/ceres/iteration_callback.h
+++ b/include/ceres/iteration_callback.h
@@ -164,8 +164,6 @@
// explicit LoggingCallback(bool log_to_stdout)
// : log_to_stdout_(log_to_stdout) {}
//
-// ~LoggingCallback() {}
-//
// CallbackReturnType operator()(const IterationSummary& summary) {
// const char* kReportRowFormat =
// "% 4d: f:% 8e d:% 3.2e g:% 3.2e h:% 3.2e "
@@ -194,7 +192,7 @@
//
class CERES_EXPORT IterationCallback {
public:
- virtual ~IterationCallback() = default;
+ virtual ~IterationCallback();
virtual CallbackReturnType operator()(const IterationSummary& summary) = 0;
};
diff --git a/include/ceres/local_parameterization.h b/include/ceres/local_parameterization.h
index b92ec9b..b16c893 100644
--- a/include/ceres/local_parameterization.h
+++ b/include/ceres/local_parameterization.h
@@ -155,7 +155,6 @@
class CERES_EXPORT IdentityParameterization : public LocalParameterization {
public:
explicit IdentityParameterization(int size);
- ~IdentityParameterization() override = default;
bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const override;
@@ -176,7 +175,6 @@
public:
explicit SubsetParameterization(int size,
const std::vector<int>& constant_parameters);
- ~SubsetParameterization() override = default;
bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const override;
@@ -201,7 +199,6 @@
// theta) part.
class CERES_EXPORT QuaternionParameterization : public LocalParameterization {
public:
- ~QuaternionParameterization() override = default;
bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const override;
@@ -224,7 +221,6 @@
class CERES_EXPORT EigenQuaternionParameterization
: public ceres::LocalParameterization {
public:
- ~EigenQuaternionParameterization() override = default;
bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const override;
@@ -250,7 +246,6 @@
: public LocalParameterization {
public:
explicit HomogeneousVectorParameterization(int size);
- ~HomogeneousVectorParameterization() override = default;
bool Plus(const double* x,
const double* delta,
double* x_plus_delta) const override;
@@ -306,7 +301,6 @@
public:
ProductParameterization(const ProductParameterization&) = delete;
ProductParameterization& operator=(const ProductParameterization&) = delete;
- ~ProductParameterization() override = default;
//
// NOTE: The constructor takes ownership of the input local
// parameterizations.
diff --git a/include/ceres/loss_function.h b/include/ceres/loss_function.h
index 4da78bf..bc9d6a1 100644
--- a/include/ceres/loss_function.h
+++ b/include/ceres/loss_function.h
@@ -85,7 +85,7 @@
class CERES_EXPORT LossFunction {
public:
- virtual ~LossFunction() = default;
+ virtual ~LossFunction();
// For a residual vector with squared 2-norm 'sq_norm', this method
// is required to fill in the value and derivatives of the loss
diff --git a/include/ceres/manifold.h b/include/ceres/manifold.h
index da56500..178d01b 100644
--- a/include/ceres/manifold.h
+++ b/include/ceres/manifold.h
@@ -148,7 +148,7 @@
class CERES_EXPORT Manifold {
public:
- virtual ~Manifold() = default;
+ virtual ~Manifold();
// Dimension of the ambient space in which the manifold is embedded.
virtual int AmbientSize() const = 0;
@@ -231,7 +231,6 @@
class CERES_EXPORT EuclideanManifold : public Manifold {
public:
EuclideanManifold(int size);
- ~EuclideanManifold() override = default;
int AmbientSize() const override;
int TangentSize() const override;
bool Plus(const double* x,
@@ -255,7 +254,6 @@
class CERES_EXPORT SubsetManifold : public Manifold {
public:
SubsetManifold(int size, const std::vector<int>& constant_parameters);
- ~SubsetManifold() override = default;
int AmbientSize() const override;
int TangentSize() const override;
@@ -293,7 +291,6 @@
public:
ProductManifold(const ProductManifold&) = delete;
ProductManifold& operator=(const ProductManifold&) = delete;
- ~ProductManifold() override = default;
// NOTE: The constructor takes ownership of the input
// manifolds.
@@ -368,8 +365,6 @@
// and to_delta( [q0; u_{3x1}] ) = u / |u| * atan2(|u|, q0)
class CERES_EXPORT QuaternionManifold : public Manifold {
public:
- QuaternionManifold() = default;
- ~QuaternionManifold() override = default;
int AmbientSize() const override { return 4; }
int TangentSize() const override { return 3; }
@@ -394,8 +389,6 @@
// difference is important and requires a different manifold.
class CERES_EXPORT EigenQuaternionManifold : public Manifold {
public:
- EigenQuaternionManifold() = default;
- ~EigenQuaternionManifold() override = default;
int AmbientSize() const override { return 4; }
int TangentSize() const override { return 3; }
diff --git a/include/ceres/sized_cost_function.h b/include/ceres/sized_cost_function.h
index b8a6a8c..ad99002 100644
--- a/include/ceres/sized_cost_function.h
+++ b/include/ceres/sized_cost_function.h
@@ -61,7 +61,6 @@
*mutable_parameter_block_sizes() = std::vector<int32_t>{Ns...};
}
- ~SizedCostFunction() override = default;
// Subclasses must implement Evaluate().
};
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 7a8bd41..cfb1b90 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -57,9 +57,9 @@
block_sparse_matrix.cc
block_structure.cc
c_api.cc
+ callbacks.cc
canonical_views_clustering.cc
cgnr_solver.cc
- callbacks.cc
compressed_col_sparse_matrix_utils.cc
compressed_row_jacobian_writer.cc
compressed_row_sparse_matrix.cc
@@ -69,6 +69,7 @@
context_impl.cc
coordinate_descent_minimizer.cc
corrector.cc
+ cost_function.cc
covariance.cc
covariance_impl.cc
cxsparse.cc
@@ -82,11 +83,13 @@
dynamic_compressed_row_jacobian_writer.cc
dynamic_compressed_row_sparse_matrix.cc
dynamic_sparse_normal_cholesky_solver.cc
- evaluator.cc
eigensparse.cc
+ evaluation_callback.cc
+ evaluator.cc
file.cc
- float_suitesparse.cc
+ first_order_function.cc
float_cxsparse.cc
+ float_suitesparse.cc
function_sample.cc
gradient_checker.cc
gradient_checking_cost_function.cc
@@ -95,6 +98,7 @@
implicit_schur_complement.cc
inner_product_computer.cc
is_close.cc
+ iteration_callback.cc
iterative_refiner.cc
iterative_schur_complement_solver.cc
levenberg_marquardt_strategy.cc
@@ -131,16 +135,16 @@
single_linkage_clustering.cc
solver.cc
solver_utils.cc
- sparse_matrix.cc
sparse_cholesky.cc
+ sparse_matrix.cc
sparse_normal_cholesky_solver.cc
- subset_preconditioner.cc
stringprintf.cc
+ subset_preconditioner.cc
suitesparse.cc
thread_token_provider.cc
triplet_sparse_matrix.cc
- trust_region_preprocessor.cc
trust_region_minimizer.cc
+ trust_region_preprocessor.cc
trust_region_step_evaluator.cc
trust_region_strategy.cc
types.cc
diff --git a/internal/ceres/autodiff_benchmarks/brdf_cost_function.h b/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
index 715d8b0..767b423 100644
--- a/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
+++ b/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
@@ -45,7 +45,6 @@
// https://github.com/wdas/brdf/blob/master/src/brdfs/disney.brdf
struct Brdf {
public:
- Brdf() = default;
template <typename T>
inline bool operator()(const T* const material,
diff --git a/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h b/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h
index 795342f..439ee9b 100644
--- a/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h
+++ b/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h
@@ -40,7 +40,6 @@
SnavelyReprojectionError(double observed_x, double observed_y)
: observed_x(observed_x), observed_y(observed_y) {}
- SnavelyReprojectionError() = default;
template <typename T>
inline bool operator()(const T* const camera,
const T* const point,
diff --git a/internal/ceres/block_sparse_matrix.cc b/internal/ceres/block_sparse_matrix.cc
index e06bd2f..9359354 100644
--- a/internal/ceres/block_sparse_matrix.cc
+++ b/internal/ceres/block_sparse_matrix.cc
@@ -46,8 +46,6 @@
using std::vector;
-BlockSparseMatrix::~BlockSparseMatrix() = default;
-
BlockSparseMatrix::BlockSparseMatrix(
CompressedRowBlockStructure* block_structure)
: num_rows_(0),
diff --git a/internal/ceres/block_sparse_matrix.h b/internal/ceres/block_sparse_matrix.h
index 0707546..448282c 100644
--- a/internal/ceres/block_sparse_matrix.h
+++ b/internal/ceres/block_sparse_matrix.h
@@ -68,8 +68,6 @@
BlockSparseMatrix(const BlockSparseMatrix&) = delete;
void operator=(const BlockSparseMatrix&) = delete;
- ~BlockSparseMatrix() override;
-
// Implementation of SparseMatrix interface.
void SetZero() final;
void RightMultiply(const double* x, double* y) const final;
diff --git a/internal/ceres/canonical_views_clustering.cc b/internal/ceres/canonical_views_clustering.cc
index 51cd4cb..0dd77a0 100644
--- a/internal/ceres/canonical_views_clustering.cc
+++ b/internal/ceres/canonical_views_clustering.cc
@@ -48,7 +48,6 @@
class CanonicalViewsClustering {
public:
- CanonicalViewsClustering() = default;
// Compute the canonical views clustering of the vertices of the
// graph. centers will contain the vertices that are the identified
diff --git a/internal/ceres/cgnr_linear_operator.h b/internal/ceres/cgnr_linear_operator.h
index 569ecdc..995e531 100644
--- a/internal/ceres/cgnr_linear_operator.h
+++ b/internal/ceres/cgnr_linear_operator.h
@@ -82,7 +82,6 @@
public:
CgnrLinearOperator(const LinearOperator& A, const double* D)
: A_(A), D_(D), z_(new double[A.num_rows()]) {}
- ~CgnrLinearOperator() override = default;
void RightMultiply(const double* x, double* y) const final {
std::fill(z_.get(), z_.get() + A_.num_rows(), 0.0);
diff --git a/internal/ceres/compressed_row_sparse_matrix.h b/internal/ceres/compressed_row_sparse_matrix.h
index 0805ee7..c1766b7 100644
--- a/internal/ceres/compressed_row_sparse_matrix.h
+++ b/internal/ceres/compressed_row_sparse_matrix.h
@@ -31,6 +31,7 @@
#ifndef CERES_INTERNAL_COMPRESSED_ROW_SPARSE_MATRIX_H_
#define CERES_INTERNAL_COMPRESSED_ROW_SPARSE_MATRIX_H_
+#include <memory>
#include <vector>
#include "ceres/internal/port.h"
diff --git a/internal/ceres/context.cc b/internal/ceres/context.cc
index 55e7635..fde16b8 100644
--- a/internal/ceres/context.cc
+++ b/internal/ceres/context.cc
@@ -34,6 +34,8 @@
namespace ceres {
+Context::Context() = default;
Context* Context::Create() { return new internal::ContextImpl(); }
+Context::~Context() = default;
} // namespace ceres
diff --git a/internal/ceres/context_impl.cc b/internal/ceres/context_impl.cc
index 20fe5cb..1acf724 100644
--- a/internal/ceres/context_impl.cc
+++ b/internal/ceres/context_impl.cc
@@ -33,6 +33,8 @@
namespace ceres {
namespace internal {
+ContextImpl::ContextImpl() = default;
+
void ContextImpl::EnsureMinimumThreads(int num_threads) {
#ifdef CERES_USE_CXX_THREADS
thread_pool.Resize(num_threads);
diff --git a/internal/ceres/context_impl.h b/internal/ceres/context_impl.h
index f94d559..2f9f74a 100644
--- a/internal/ceres/context_impl.h
+++ b/internal/ceres/context_impl.h
@@ -47,11 +47,10 @@
class CERES_EXPORT_INTERNAL ContextImpl : public Context {
public:
- ContextImpl() = default;
+ ContextImpl();
ContextImpl(const ContextImpl&) = delete;
void operator=(const ContextImpl&) = delete;
- ~ContextImpl() override = default;
// When compiled with C++ threading support, resize the thread pool to have
// at min(num_thread, num_hardware_threads) where num_hardware_threads is
diff --git a/internal/ceres/cost_function.cc b/internal/ceres/cost_function.cc
new file mode 100644
index 0000000..7597b43
--- /dev/null
+++ b/internal/ceres/cost_function.cc
@@ -0,0 +1,39 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2022 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+// used to endorse or promote products derived from this software without
+// specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+// keir@google.m (Keir Mierle)
+
+#include "ceres/cost_function.h"
+
+namespace ceres {
+
+CostFunction::CostFunction() : num_residuals_(0) {}
+CostFunction::~CostFunction() = default;
+
+} // namespace ceres
diff --git a/internal/ceres/covariance_test.cc b/internal/ceres/covariance_test.cc
index b117a64..20b480f 100644
--- a/internal/ceres/covariance_test.cc
+++ b/internal/ceres/covariance_test.cc
@@ -379,7 +379,6 @@
// x_plus_delta = delta * x;
class PolynomialParameterization : public LocalParameterization {
public:
- ~PolynomialParameterization() final = default;
bool Plus(const double* x,
const double* delta,
@@ -402,7 +401,6 @@
// x_plus_delta = delta * x;
class PolynomialManifold : public Manifold {
public:
- ~PolynomialManifold() final = default;
bool Plus(const double* x,
const double* delta,
diff --git a/internal/ceres/dense_cholesky.cc b/internal/ceres/dense_cholesky.cc
index 841ceb1..af555e7 100644
--- a/internal/ceres/dense_cholesky.cc
+++ b/internal/ceres/dense_cholesky.cc
@@ -59,6 +59,8 @@
namespace ceres {
namespace internal {
+DenseCholesky::~DenseCholesky() = default;
+
std::unique_ptr<DenseCholesky> DenseCholesky::Create(
const LinearSolver::Options& options) {
std::unique_ptr<DenseCholesky> dense_cholesky;
diff --git a/internal/ceres/dense_cholesky.h b/internal/ceres/dense_cholesky.h
index a3514b4..a7bb80a 100644
--- a/internal/ceres/dense_cholesky.h
+++ b/internal/ceres/dense_cholesky.h
@@ -59,7 +59,7 @@
static std::unique_ptr<DenseCholesky> Create(
const LinearSolver::Options& options);
- virtual ~DenseCholesky() = default;
+ virtual ~DenseCholesky();
// Computes the Cholesky factorization of the given matrix.
//
@@ -102,7 +102,6 @@
class CERES_EXPORT_INTERNAL EigenDenseCholesky : public DenseCholesky {
public:
- ~EigenDenseCholesky() override = default;
LinearSolverTerminationType Factorize(int num_cols,
double* lhs,
@@ -119,7 +118,6 @@
#ifndef CERES_NO_LAPACK
class CERES_EXPORT_INTERNAL LAPACKDenseCholesky : public DenseCholesky {
public:
- ~LAPACKDenseCholesky() override = default;
LinearSolverTerminationType Factorize(int num_cols,
double* lhs,
diff --git a/internal/ceres/dense_qr.cc b/internal/ceres/dense_qr.cc
index 33831ea..33a7cbd 100644
--- a/internal/ceres/dense_qr.cc
+++ b/internal/ceres/dense_qr.cc
@@ -106,6 +106,8 @@
namespace ceres {
namespace internal {
+DenseQR::~DenseQR() = default;
+
std::unique_ptr<DenseQR> DenseQR::Create(const LinearSolver::Options& options) {
std::unique_ptr<DenseQR> dense_qr;
diff --git a/internal/ceres/dense_qr.h b/internal/ceres/dense_qr.h
index 93d890b..302fd4a 100644
--- a/internal/ceres/dense_qr.h
+++ b/internal/ceres/dense_qr.h
@@ -54,7 +54,7 @@
public:
static std::unique_ptr<DenseQR> Create(const LinearSolver::Options& options);
- virtual ~DenseQR() = default;
+ virtual ~DenseQR();
// Computes the QR factorization of the given matrix.
//
@@ -98,7 +98,6 @@
class CERES_EXPORT_INTERNAL EigenDenseQR : public DenseQR {
public:
- ~EigenDenseQR() override = default;
LinearSolverTerminationType Factorize(int num_rows,
int num_cols,
@@ -116,7 +115,6 @@
#ifndef CERES_NO_LAPACK
class CERES_EXPORT_INTERNAL LAPACKDenseQR : public DenseQR {
public:
- ~LAPACKDenseQR() override = default;
LinearSolverTerminationType Factorize(int num_rows,
int num_cols,
diff --git a/internal/ceres/dense_sparse_matrix.h b/internal/ceres/dense_sparse_matrix.h
index 5963322..1a61296 100644
--- a/internal/ceres/dense_sparse_matrix.h
+++ b/internal/ceres/dense_sparse_matrix.h
@@ -51,7 +51,6 @@
explicit DenseSparseMatrix(const Matrix& m);
DenseSparseMatrix(int num_rows, int num_cols);
- ~DenseSparseMatrix() override = default;
// SparseMatrix interface.
void SetZero() final;
diff --git a/internal/ceres/dogleg_strategy.h b/internal/ceres/dogleg_strategy.h
index d79fb35..3ebf8bb 100644
--- a/internal/ceres/dogleg_strategy.h
+++ b/internal/ceres/dogleg_strategy.h
@@ -56,7 +56,6 @@
class CERES_EXPORT_INTERNAL DoglegStrategy : public TrustRegionStrategy {
public:
explicit DoglegStrategy(const TrustRegionStrategy::Options& options);
- ~DoglegStrategy() override = default;
// TrustRegionStrategy interface
Summary ComputeStep(const PerSolveOptions& per_solve_options,
diff --git a/internal/ceres/dynamic_sparse_normal_cholesky_solver.h b/internal/ceres/dynamic_sparse_normal_cholesky_solver.h
index 6a2cb33..a6203c9 100644
--- a/internal/ceres/dynamic_sparse_normal_cholesky_solver.h
+++ b/internal/ceres/dynamic_sparse_normal_cholesky_solver.h
@@ -58,7 +58,6 @@
public:
explicit DynamicSparseNormalCholeskySolver(
const LinearSolver::Options& options);
- ~DynamicSparseNormalCholeskySolver() override = default;
private:
LinearSolver::Summary SolveImpl(CompressedRowSparseMatrix* A,
diff --git a/internal/ceres/eigensparse.cc b/internal/ceres/eigensparse.cc
index ba8e05a..1a896cc 100644
--- a/internal/ceres/eigensparse.cc
+++ b/internal/ceres/eigensparse.cc
@@ -48,7 +48,6 @@
class EigenSparseCholeskyTemplate : public SparseCholesky {
public:
EigenSparseCholeskyTemplate() : analyzed_(false) {}
- ~EigenSparseCholeskyTemplate() override = default;
CompressedRowSparseMatrix::StorageType StorageType() const final {
return CompressedRowSparseMatrix::LOWER_TRIANGULAR;
}
diff --git a/internal/ceres/evaluation_callback.cc b/internal/ceres/evaluation_callback.cc
new file mode 100644
index 0000000..77591a8
--- /dev/null
+++ b/internal/ceres/evaluation_callback.cc
@@ -0,0 +1,37 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2022 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+// used to endorse or promote products derived from this software without
+// specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: mierle@gmail.com (Keir Mierle)
+
+#include "ceres/evaluation_callback.h"
+
+namespace ceres {
+
+EvaluationCallback::~EvaluationCallback() = default;
+
+} // namespace ceres
diff --git a/internal/ceres/evaluation_callback_test.cc b/internal/ceres/evaluation_callback_test.cc
index 84fff8a..adeb4da 100644
--- a/internal/ceres/evaluation_callback_test.cc
+++ b/internal/ceres/evaluation_callback_test.cc
@@ -72,7 +72,6 @@
evaluate_num_calls(0),
evaluate_last_parameter_hash(kUninitialized) {}
- ~WigglyBowlCostFunctionAndEvaluationCallback() override = default;
// Evaluation callback interface. This checks that all the preconditions are
// met at the point that Ceres calls into it.
diff --git a/internal/ceres/first_order_function.cc b/internal/ceres/first_order_function.cc
new file mode 100644
index 0000000..26f1348
--- /dev/null
+++ b/internal/ceres/first_order_function.cc
@@ -0,0 +1,37 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2022 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+// used to endorse or promote products derived from this software without
+// specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+
+#include "ceres/first_order_function.h"
+
+namespace ceres {
+
+FirstOrderFunction::~FirstOrderFunction() = default;
+
+} // namespace ceres
diff --git a/internal/ceres/fixed_array_test.cc b/internal/ceres/fixed_array_test.cc
index 287230a..2982a98 100644
--- a/internal/ceres/fixed_array_test.cc
+++ b/internal/ceres/fixed_array_test.cc
@@ -500,8 +500,6 @@
// PickyDelete EXPECTs its class-scope deallocation funcs are unused.
struct PickyDelete {
- PickyDelete() = default;
- ~PickyDelete() = default;
void operator delete(void* p) {
EXPECT_TRUE(false) << __FUNCTION__;
::operator delete(p);
diff --git a/internal/ceres/generate_template_specializations.py b/internal/ceres/generate_template_specializations.py
index 74e46c2..617dcbf 100644
--- a/internal/ceres/generate_template_specializations.py
+++ b/internal/ceres/generate_template_specializations.py
@@ -85,9 +85,9 @@
return str(size)
def SpecializationFilename(prefix, row_block_size, e_block_size, f_block_size):
- return "_".join([prefix] + map(SuffixForSize, (row_block_size,
+ return "_".join([prefix] + list(map(SuffixForSize, (row_block_size,
e_block_size,
- f_block_size)))
+ f_block_size))))
def GenerateFactoryConditional(row_block_size, e_block_size, f_block_size):
conditionals = []
diff --git a/internal/ceres/gradient_checking_cost_function.cc b/internal/ceres/gradient_checking_cost_function.cc
index bbe68b8..1bb9ec9 100644
--- a/internal/ceres/gradient_checking_cost_function.cc
+++ b/internal/ceres/gradient_checking_cost_function.cc
@@ -80,7 +80,6 @@
set_num_residuals(function->num_residuals());
}
- ~GradientCheckingCostFunction() override = default;
bool Evaluate(double const* const* parameters,
double* residuals,
diff --git a/internal/ceres/gradient_checking_cost_function_test.cc b/internal/ceres/gradient_checking_cost_function_test.cc
index 5630c32..5e6b64c 100644
--- a/internal/ceres/gradient_checking_cost_function_test.cc
+++ b/internal/ceres/gradient_checking_cost_function_test.cc
@@ -268,7 +268,6 @@
set_num_residuals(num_residuals);
mutable_parameter_block_sizes()->push_back(parameter_block_size);
}
- ~UnaryCostFunction() override = default;
bool Evaluate(double const* const* parameters,
double* residuals,
diff --git a/internal/ceres/gradient_problem_evaluator.h b/internal/ceres/gradient_problem_evaluator.h
index f0aba94..86611d0 100644
--- a/internal/ceres/gradient_problem_evaluator.h
+++ b/internal/ceres/gradient_problem_evaluator.h
@@ -50,7 +50,6 @@
explicit GradientProblemEvaluator(const GradientProblem& problem)
: problem_(problem) {}
- ~GradientProblemEvaluator() override = default;
std::unique_ptr<SparseMatrix> CreateJacobian() const final { return nullptr; }
diff --git a/internal/ceres/gradient_problem_solver_test.cc b/internal/ceres/gradient_problem_solver_test.cc
index 5e33b31..47a69f3 100644
--- a/internal/ceres/gradient_problem_solver_test.cc
+++ b/internal/ceres/gradient_problem_solver_test.cc
@@ -39,7 +39,6 @@
// Rosenbrock function; see http://en.wikipedia.org/wiki/Rosenbrock_function .
class Rosenbrock : public ceres::FirstOrderFunction {
public:
- ~Rosenbrock() override = default;
bool Evaluate(const double* parameters,
double* cost,
@@ -73,7 +72,6 @@
}
class QuadraticFunction : public ceres::FirstOrderFunction {
- ~QuadraticFunction() override = default;
bool Evaluate(const double* parameters,
double* cost,
double* gradient) const final {
@@ -90,7 +88,6 @@
struct RememberingCallback : public IterationCallback {
explicit RememberingCallback(double* x) : calls(0), x(x) {}
- ~RememberingCallback() override = default;
CallbackReturnType operator()(const IterationSummary& summary) final {
x_values.push_back(*x);
return SOLVER_CONTINUE;
diff --git a/internal/ceres/graph.h b/internal/ceres/graph.h
index ef65453..685b267 100644
--- a/internal/ceres/graph.h
+++ b/internal/ceres/graph.h
@@ -49,7 +49,6 @@
template <typename Vertex>
class Graph {
public:
- Graph() = default;
// Add a vertex.
void AddVertex(const Vertex& vertex) {
@@ -106,7 +105,6 @@
template <typename Vertex>
class WeightedGraph {
public:
- WeightedGraph() = default;
// Add a weighted vertex. If the vertex already exists in the graph,
// its weight is set to the new weight.
diff --git a/internal/ceres/implicit_schur_complement.cc b/internal/ceres/implicit_schur_complement.cc
index 4e712b9..82a776c 100644
--- a/internal/ceres/implicit_schur_complement.cc
+++ b/internal/ceres/implicit_schur_complement.cc
@@ -45,8 +45,6 @@
const LinearSolver::Options& options)
: options_(options), D_(nullptr), b_(nullptr) {}
-ImplicitSchurComplement::~ImplicitSchurComplement() = default;
-
void ImplicitSchurComplement::Init(const BlockSparseMatrix& A,
const double* D,
const double* b) {
diff --git a/internal/ceres/implicit_schur_complement.h b/internal/ceres/implicit_schur_complement.h
index 4ae76e5..b073706 100644
--- a/internal/ceres/implicit_schur_complement.h
+++ b/internal/ceres/implicit_schur_complement.h
@@ -100,7 +100,6 @@
// TODO(sameeragarwal): Get rid of the two bools below and replace
// them with enums.
explicit ImplicitSchurComplement(const LinearSolver::Options& options);
- ~ImplicitSchurComplement() override;
// Initialize the Schur complement for a linear least squares
// problem of the form
diff --git a/internal/ceres/iteration_callback.cc b/internal/ceres/iteration_callback.cc
new file mode 100644
index 0000000..804811d
--- /dev/null
+++ b/internal/ceres/iteration_callback.cc
@@ -0,0 +1,37 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2019 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+// used to endorse or promote products derived from this software without
+// specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+
+#include "ceres/iteration_callback.h"
+
+namespace ceres {
+
+IterationCallback::~IterationCallback() = default;
+
+} // namespace ceres
diff --git a/internal/ceres/iterative_refiner_test.cc b/internal/ceres/iterative_refiner_test.cc
index d3ec9a2..5464a27 100644
--- a/internal/ceres/iterative_refiner_test.cc
+++ b/internal/ceres/iterative_refiner_test.cc
@@ -54,7 +54,6 @@
class FakeSparseMatrix : public SparseMatrix {
public:
FakeSparseMatrix(const Matrix& m) : m_(m) {}
- ~FakeSparseMatrix() override = default;
// y += Ax
void RightMultiply(const double* x, double* y) const final {
@@ -90,7 +89,6 @@
class FakeSparseCholesky : public SparseCholesky {
public:
FakeSparseCholesky(const Matrix& lhs) { lhs_ = lhs.cast<Scalar>(); }
- ~FakeSparseCholesky() override = default;
LinearSolverTerminationType Solve(const double* rhs_ptr,
double* solution_ptr,
diff --git a/internal/ceres/levenberg_marquardt_strategy_test.cc b/internal/ceres/levenberg_marquardt_strategy_test.cc
index dfb7302..818b7f5 100644
--- a/internal/ceres/levenberg_marquardt_strategy_test.cc
+++ b/internal/ceres/levenberg_marquardt_strategy_test.cc
@@ -58,7 +58,6 @@
RegularizationCheckingLinearSolver(const int num_cols, const double* diagonal)
: num_cols_(num_cols), diagonal_(diagonal) {}
- ~RegularizationCheckingLinearSolver() override = default;
private:
LinearSolver::Summary SolveImpl(
diff --git a/internal/ceres/line_search.cc b/internal/ceres/line_search.cc
index 0141015..f8dbc8a 100644
--- a/internal/ceres/line_search.cc
+++ b/internal/ceres/line_search.cc
@@ -65,6 +65,8 @@
return os;
}
+LineSearch::~LineSearch() = default;
+
LineSearch::LineSearch(const LineSearch::Options& options)
: options_(options) {}
diff --git a/internal/ceres/line_search.h b/internal/ceres/line_search.h
index 7d1a852..958d71d 100644
--- a/internal/ceres/line_search.h
+++ b/internal/ceres/line_search.h
@@ -33,6 +33,7 @@
#ifndef CERES_INTERNAL_LINE_SEARCH_H_
#define CERES_INTERNAL_LINE_SEARCH_H_
+#include <memory>
#include <string>
#include <vector>
@@ -161,7 +162,7 @@
};
explicit LineSearch(const LineSearch::Options& options);
- virtual ~LineSearch() = default;
+ virtual ~LineSearch();
static std::unique_ptr<LineSearch> Create(
const LineSearchType line_search_type,
@@ -261,7 +262,6 @@
class ArmijoLineSearch : public LineSearch {
public:
explicit ArmijoLineSearch(const LineSearch::Options& options);
- ~ArmijoLineSearch() override = default;
private:
void DoSearch(double step_size_estimate,
@@ -280,7 +280,6 @@
class WolfeLineSearch : public LineSearch {
public:
explicit WolfeLineSearch(const LineSearch::Options& options);
- ~WolfeLineSearch() override = default;
// Returns true iff either a valid point, or valid bracket are found.
bool BracketingPhase(const FunctionSample& initial_position,
diff --git a/internal/ceres/line_search_direction.cc b/internal/ceres/line_search_direction.cc
index 4d6e641..8a71b56 100644
--- a/internal/ceres/line_search_direction.cc
+++ b/internal/ceres/line_search_direction.cc
@@ -40,7 +40,6 @@
class SteepestDescent : public LineSearchDirection {
public:
- ~SteepestDescent() override = default;
bool NextDirection(const LineSearchMinimizer::State& previous,
const LineSearchMinimizer::State& current,
Vector* search_direction) override {
@@ -105,7 +104,6 @@
use_approximate_eigenvalue_bfgs_scaling),
is_positive_definite_(true) {}
- ~LBFGS() override = default;
bool NextDirection(const LineSearchMinimizer::State& previous,
const LineSearchMinimizer::State& current,
@@ -161,7 +159,6 @@
inverse_hessian_ = Matrix::Identity(num_parameters, num_parameters);
}
- ~BFGS() override = default;
bool NextDirection(const LineSearchMinimizer::State& previous,
const LineSearchMinimizer::State& current,
@@ -338,6 +335,8 @@
bool is_positive_definite_;
};
+LineSearchDirection::~LineSearchDirection() = default;
+
std::unique_ptr<LineSearchDirection> LineSearchDirection::Create(
const LineSearchDirection::Options& options) {
if (options.type == STEEPEST_DESCENT) {
diff --git a/internal/ceres/line_search_direction.h b/internal/ceres/line_search_direction.h
index 29127c1..11d56bc 100644
--- a/internal/ceres/line_search_direction.h
+++ b/internal/ceres/line_search_direction.h
@@ -59,7 +59,7 @@
static std::unique_ptr<LineSearchDirection> Create(const Options& options);
- virtual ~LineSearchDirection() = default;
+ virtual ~LineSearchDirection();
virtual bool NextDirection(const LineSearchMinimizer::State& previous,
const LineSearchMinimizer::State& current,
Vector* search_direction) = 0;
diff --git a/internal/ceres/line_search_minimizer.h b/internal/ceres/line_search_minimizer.h
index ae4670a..75928f8 100644
--- a/internal/ceres/line_search_minimizer.h
+++ b/internal/ceres/line_search_minimizer.h
@@ -63,7 +63,6 @@
double step_size;
};
- ~LineSearchMinimizer() override = default;
void Minimize(const Minimizer::Options& options,
double* parameters,
Solver::Summary* summary) final;
diff --git a/internal/ceres/line_search_preprocessor.cc b/internal/ceres/line_search_preprocessor.cc
index 02a1a8c..26b8d99 100644
--- a/internal/ceres/line_search_preprocessor.cc
+++ b/internal/ceres/line_search_preprocessor.cc
@@ -70,8 +70,6 @@
} // namespace
-LineSearchPreprocessor::~LineSearchPreprocessor() = default;
-
bool LineSearchPreprocessor::Preprocess(const Solver::Options& options,
ProblemImpl* problem,
PreprocessedProblem* pp) {
diff --git a/internal/ceres/line_search_preprocessor.h b/internal/ceres/line_search_preprocessor.h
index 1ba7076..cdce438 100644
--- a/internal/ceres/line_search_preprocessor.h
+++ b/internal/ceres/line_search_preprocessor.h
@@ -39,7 +39,6 @@
class CERES_EXPORT_INTERNAL LineSearchPreprocessor : public Preprocessor {
public:
- ~LineSearchPreprocessor() override;
bool Preprocess(const Solver::Options& options,
ProblemImpl* problem,
PreprocessedProblem* preprocessed_problem) final;
diff --git a/internal/ceres/linear_solver.h b/internal/ceres/linear_solver.h
index ea44f3b..9905af0 100644
--- a/internal/ceres/linear_solver.h
+++ b/internal/ceres/linear_solver.h
@@ -301,7 +301,6 @@
template <typename MatrixType>
class TypedLinearSolver : public LinearSolver {
public:
- ~TypedLinearSolver() override = default;
LinearSolver::Summary Solve(
LinearOperator* A,
const double* b,
diff --git a/internal/ceres/loss_function.cc b/internal/ceres/loss_function.cc
index f4ea0f7..3392b3b 100644
--- a/internal/ceres/loss_function.cc
+++ b/internal/ceres/loss_function.cc
@@ -39,6 +39,8 @@
namespace ceres {
+LossFunction::~LossFunction() = default;
+
void TrivialLoss::Evaluate(double s, double rho[3]) const {
rho[0] = s;
rho[1] = 1.0;
diff --git a/internal/ceres/low_rank_inverse_hessian.h b/internal/ceres/low_rank_inverse_hessian.h
index a7a572c..00414b7 100644
--- a/internal/ceres/low_rank_inverse_hessian.h
+++ b/internal/ceres/low_rank_inverse_hessian.h
@@ -73,7 +73,6 @@
LowRankInverseHessian(int num_parameters,
int max_num_corrections,
bool use_approximate_eigenvalue_scaling);
- ~LowRankInverseHessian() override = default;
// Update the low rank approximation. delta_x is the change in the
// domain of Hessian, and delta_gradient is the change in the
diff --git a/internal/ceres/manifold.cc b/internal/ceres/manifold.cc
index 8c81a99..451286a 100644
--- a/internal/ceres/manifold.cc
+++ b/internal/ceres/manifold.cc
@@ -137,6 +137,8 @@
} // namespace
+Manifold::~Manifold() = default;
+
bool Manifold::RightMultiplyByPlusJacobian(const double* x,
const int num_rows,
const double* ambient_matrix,
diff --git a/internal/ceres/manifold_adapter.h b/internal/ceres/manifold_adapter.h
index 2efec3a..5aa2005 100644
--- a/internal/ceres/manifold_adapter.h
+++ b/internal/ceres/manifold_adapter.h
@@ -15,7 +15,6 @@
CHECK(local_parameterization != nullptr);
}
- ~ManifoldAdapter() override = default;
bool Plus(const double* x,
const double* delta,
diff --git a/internal/ceres/miniglog/glog/logging.h b/internal/ceres/miniglog/glog/logging.h
index 34f26a5..67ca18a 100644
--- a/internal/ceres/miniglog/glog/logging.h
+++ b/internal/ceres/miniglog/glog/logging.h
@@ -294,7 +294,6 @@
// is not used" and "statement has no effect".
class CERES_EXPORT LoggerVoidify {
public:
- LoggerVoidify() = default;
// This has to be an operator with a precedence lower than << but
// higher than ?:
void operator&(const std::ostream& s) {}
diff --git a/internal/ceres/minimizer_test.cc b/internal/ceres/minimizer_test.cc
index 909beab..8ddf126 100644
--- a/internal/ceres/minimizer_test.cc
+++ b/internal/ceres/minimizer_test.cc
@@ -39,7 +39,6 @@
class FakeIterationCallback : public IterationCallback {
public:
- ~FakeIterationCallback() override = default;
CallbackReturnType operator()(const IterationSummary& summary) final {
return SOLVER_CONTINUE;
}
@@ -62,7 +61,6 @@
class AbortingIterationCallback : public IterationCallback {
public:
- ~AbortingIterationCallback() override = default;
CallbackReturnType operator()(const IterationSummary& summary) final {
return SOLVER_ABORT;
}
@@ -80,7 +78,6 @@
class SucceedingIterationCallback : public IterationCallback {
public:
- ~SucceedingIterationCallback() override = default;
CallbackReturnType operator()(const IterationSummary& summary) final {
return SOLVER_TERMINATE_SUCCESSFULLY;
}
diff --git a/internal/ceres/parameter_block_test.cc b/internal/ceres/parameter_block_test.cc
index e0da433..a532a9a 100644
--- a/internal/ceres/parameter_block_test.cc
+++ b/internal/ceres/parameter_block_test.cc
@@ -111,7 +111,6 @@
struct TestManifold : public Manifold {
public:
- ~TestManifold() final = default;
bool Plus(const double* x,
const double* delta,
@@ -166,7 +165,6 @@
class BadManifold : public Manifold {
public:
BadManifold() : calls_(0) {}
- ~BadManifold() final = default;
bool Plus(const double* x,
const double* delta,
diff --git a/internal/ceres/partitioned_matrix_view.cc b/internal/ceres/partitioned_matrix_view.cc
index 595b701..0d81c02 100644
--- a/internal/ceres/partitioned_matrix_view.cc
+++ b/internal/ceres/partitioned_matrix_view.cc
@@ -45,6 +45,8 @@
namespace ceres {
namespace internal {
+PartitionedMatrixViewBase::~PartitionedMatrixViewBase() = default;
+
std::unique_ptr<PartitionedMatrixViewBase> PartitionedMatrixViewBase::Create(
const LinearSolver::Options& options, const BlockSparseMatrix& matrix) {
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
diff --git a/internal/ceres/partitioned_matrix_view.h b/internal/ceres/partitioned_matrix_view.h
index 36cf0d4..d9ebcd9 100644
--- a/internal/ceres/partitioned_matrix_view.h
+++ b/internal/ceres/partitioned_matrix_view.h
@@ -62,7 +62,7 @@
// wrong output.
class CERES_EXPORT_INTERNAL PartitionedMatrixViewBase {
public:
- virtual ~PartitionedMatrixViewBase() = default;
+ virtual ~PartitionedMatrixViewBase();
// y += E'x
virtual void LeftMultiplyE(const double* x, double* y) const = 0;
@@ -121,7 +121,6 @@
// num_col_blocks_a column blocks.
PartitionedMatrixView(const BlockSparseMatrix& matrix, int num_col_blocks_e);
- ~PartitionedMatrixView() override;
void LeftMultiplyE(const double* x, double* y) const final;
void LeftMultiplyF(const double* x, double* y) const final;
void RightMultiplyE(const double* x, double* y) const final;
diff --git a/internal/ceres/partitioned_matrix_view_impl.h b/internal/ceres/partitioned_matrix_view_impl.h
index 4dd8d70..753e0f9 100644
--- a/internal/ceres/partitioned_matrix_view_impl.h
+++ b/internal/ceres/partitioned_matrix_view_impl.h
@@ -80,10 +80,6 @@
CHECK_EQ(num_cols_e_ + num_cols_f_, matrix_.num_cols());
}
-template <int kRowBlockSize, int kEBlockSize, int kFBlockSize>
-PartitionedMatrixView<kRowBlockSize, kEBlockSize, kFBlockSize>::
- ~PartitionedMatrixView() = default;
-
// The next four methods don't seem to be particularly cache
// friendly. This is an artifact of how the BlockStructure of the
// input matrix is constructed. These methods will benefit from
diff --git a/internal/ceres/partitioned_matrix_view_template.py b/internal/ceres/partitioned_matrix_view_template.py
index 9ab56cf..42a135f 100644
--- a/internal/ceres/partitioned_matrix_view_template.py
+++ b/internal/ceres/partitioned_matrix_view_template.py
@@ -128,6 +128,8 @@
namespace ceres {
namespace internal {
+PartitionedMatrixViewBase::~PartitionedMatrixViewBase() = default;
+
std::unique_ptr<PartitionedMatrixViewBase> PartitionedMatrixViewBase::Create(
const LinearSolver::Options& options, const BlockSparseMatrix& matrix) {
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
diff --git a/internal/ceres/preconditioner.h b/internal/ceres/preconditioner.h
index e0eb88d..04dffef 100644
--- a/internal/ceres/preconditioner.h
+++ b/internal/ceres/preconditioner.h
@@ -149,7 +149,6 @@
template <typename MatrixType>
class TypedPreconditioner : public Preconditioner {
public:
- ~TypedPreconditioner() override = default;
bool Update(const LinearOperator& A, const double* D) final {
return UpdateImpl(*down_cast<const MatrixType*>(&A), D);
}
diff --git a/internal/ceres/problem_test.cc b/internal/ceres/problem_test.cc
index 1987e13..9a73034 100644
--- a/internal/ceres/problem_test.cc
+++ b/internal/ceres/problem_test.cc
@@ -67,7 +67,6 @@
mutable_parameter_block_sizes()->push_back(parameter_block_size);
}
- ~UnaryCostFunction() override = default;
bool Evaluate(double const* const* parameters,
double* residuals,
diff --git a/internal/ceres/program.cc b/internal/ceres/program.cc
index adfff0b..e65ffcd 100644
--- a/internal/ceres/program.cc
+++ b/internal/ceres/program.cc
@@ -54,11 +54,6 @@
namespace ceres {
namespace internal {
-Program::Program() = default;
-
-Program::Program(const Program& program)
-
- = default;
const std::vector<ParameterBlock*>& Program::parameter_blocks() const {
return parameter_blocks_;
diff --git a/internal/ceres/program.h b/internal/ceres/program.h
index ffd5db7..82ae130 100644
--- a/internal/ceres/program.h
+++ b/internal/ceres/program.h
@@ -59,9 +59,6 @@
// not built for transformation.
class CERES_EXPORT_INTERNAL Program {
public:
- Program();
- explicit Program(const Program& program);
-
// The ordered parameter and residual blocks for the program.
const std::vector<ParameterBlock*>& parameter_blocks() const;
const std::vector<ResidualBlock*>& residual_blocks() const;
diff --git a/internal/ceres/program_test.cc b/internal/ceres/program_test.cc
index d12cfa5..8f1c422 100644
--- a/internal/ceres/program_test.cc
+++ b/internal/ceres/program_test.cc
@@ -331,7 +331,6 @@
}
}
- ~NumParameterBlocksCostFunction() override = default;
bool Evaluate(double const* const* parameters,
double* residuals,
diff --git a/internal/ceres/schur_complement_solver.cc b/internal/ceres/schur_complement_solver.cc
index 15c1629..adc1531 100644
--- a/internal/ceres/schur_complement_solver.cc
+++ b/internal/ceres/schur_complement_solver.cc
@@ -68,7 +68,6 @@
const BlockRandomAccessSparseMatrix& m)
: m_(m) {}
- ~BlockRandomAccessSparseMatrixAdapter() override = default;
// y = y + Ax;
void RightMultiply(const double* x, double* y) const final {
@@ -93,7 +92,6 @@
const BlockRandomAccessDiagonalMatrix& m)
: m_(m) {}
- ~BlockRandomAccessDiagonalMatrixAdapter() override = default;
// y = y + Ax;
void RightMultiply(const double* x, double* y) const final {
@@ -122,8 +120,6 @@
CHECK(options.context != nullptr);
}
-SchurComplementSolver::~SchurComplementSolver() = default;
-
LinearSolver::Summary SchurComplementSolver::SolveImpl(
BlockSparseMatrix* A,
const double* b,
diff --git a/internal/ceres/schur_complement_solver.h b/internal/ceres/schur_complement_solver.h
index 3d343bf..2060cc8 100644
--- a/internal/ceres/schur_complement_solver.h
+++ b/internal/ceres/schur_complement_solver.h
@@ -115,7 +115,6 @@
SchurComplementSolver(const SchurComplementSolver&) = delete;
void operator=(const SchurComplementSolver&) = delete;
- ~SchurComplementSolver() override;
LinearSolver::Summary SolveImpl(
BlockSparseMatrix* A,
const double* b,
diff --git a/internal/ceres/schur_eliminator.cc b/internal/ceres/schur_eliminator.cc
index bcffbe6..de0e950 100644
--- a/internal/ceres/schur_eliminator.cc
+++ b/internal/ceres/schur_eliminator.cc
@@ -45,6 +45,8 @@
namespace ceres {
namespace internal {
+SchurEliminatorBase::~SchurEliminatorBase() = default;
+
std::unique_ptr<SchurEliminatorBase> SchurEliminatorBase::Create(
const LinearSolver::Options& options) {
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
diff --git a/internal/ceres/schur_eliminator.h b/internal/ceres/schur_eliminator.h
index cf7a3e4..dd3d4b2 100644
--- a/internal/ceres/schur_eliminator.h
+++ b/internal/ceres/schur_eliminator.h
@@ -165,7 +165,7 @@
// Example usage: Please see schur_complement_solver.cc
class CERES_EXPORT_INTERNAL SchurEliminatorBase {
public:
- virtual ~SchurEliminatorBase() = default;
+ virtual ~SchurEliminatorBase();
// Initialize the eliminator. It is the user's responsibilty to call
// this function before calling Eliminate or BackSubstitute. It is
@@ -380,7 +380,6 @@
int kFBlockSize = Eigen::Dynamic>
class SchurEliminatorForOneFBlock : public SchurEliminatorBase {
public:
- ~SchurEliminatorForOneFBlock() override = default;
void Init(int num_eliminate_blocks,
bool assume_full_rank_ete,
const CompressedRowBlockStructure* bs) override {
diff --git a/internal/ceres/schur_eliminator_template.py b/internal/ceres/schur_eliminator_template.py
index a6a8d56..0bddb29 100644
--- a/internal/ceres/schur_eliminator_template.py
+++ b/internal/ceres/schur_eliminator_template.py
@@ -130,6 +130,8 @@
namespace ceres {
namespace internal {
+SchurEliminatorBase::~SchurEliminatorBase() = default;
+
std::unique_ptr<SchurEliminatorBase> SchurEliminatorBase::Create(
const LinearSolver::Options& options) {
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
diff --git a/internal/ceres/solver_test.cc b/internal/ceres/solver_test.cc
index 41f3872..3ecde20 100644
--- a/internal/ceres/solver_test.cc
+++ b/internal/ceres/solver_test.cc
@@ -78,7 +78,6 @@
struct RememberingCallback : public IterationCallback {
explicit RememberingCallback(double* x) : calls(0), x(x) {}
- ~RememberingCallback() override = default;
CallbackReturnType operator()(const IterationSummary& summary) final {
x_values.push_back(*x);
return SOLVER_CONTINUE;
@@ -89,7 +88,6 @@
};
struct NoOpEvaluationCallback : EvaluationCallback {
- ~NoOpEvaluationCallback() override = default;
void PrepareForEvaluation(bool evaluate_jacobians,
bool new_evaluation_point) final {
(void)evaluate_jacobians;
diff --git a/internal/ceres/trust_region_minimizer_test.cc b/internal/ceres/trust_region_minimizer_test.cc
index d42aab0..62261f7 100644
--- a/internal/ceres/trust_region_minimizer_test.cc
+++ b/internal/ceres/trust_region_minimizer_test.cc
@@ -76,7 +76,6 @@
}
// clang-format on
- ~PowellEvaluator2() override = default;
// Implementation of Evaluator interface.
std::unique_ptr<SparseMatrix> CreateJacobian() const final {