From a4afdfeace2d6cc017f9df8db57cb3fd27660c6d Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Sun, 8 Dec 2013 14:45:18 -0800 Subject: [PATCH] refactor(kernel/expr): remove the dangerous expr::release method Signed-off-by: Leonardo de Moura --- src/kernel/expr.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/kernel/expr.h b/src/kernel/expr.h index d5af9d1378..9aa897f4b9 100644 --- a/src/kernel/expr.h +++ b/src/kernel/expr.h @@ -105,6 +105,14 @@ private: expr_cell * steal_ptr() { expr_cell * r = m_ptr; m_ptr = nullptr; return r; } friend class optional; public: + /** + \brief The default constructor creates a reference to a "dummy" + expression. The actual "dummy" expression is not relevant, and + no procedure should rely on the kind of expression used. + + We have a default constructor because some collections only work + with types that have a default constructor. + */ expr(); expr(expr const & s):m_ptr(s.m_ptr) { if (m_ptr) m_ptr->inc_ref(); } expr(expr && s):m_ptr(s.m_ptr) { s.m_ptr = nullptr; } @@ -112,8 +120,6 @@ public: friend void swap(expr & a, expr & b) { std::swap(a.m_ptr, b.m_ptr); } - void release() { if (m_ptr) m_ptr->dec_ref(); m_ptr = nullptr; } - expr & operator=(expr const & s) { LEAN_COPY_REF(expr, s); } expr & operator=(expr && s) { LEAN_MOVE_REF(expr, s); }