diff --git a/CMakeLists.txt b/CMakeLists.txt index c122aac..2875f31 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,7 +89,7 @@ if(MSVC) add_definitions(/W4) add_definitions(/bigobj) else() - add_definitions(-Wall -Wextra -Wshadow -pedantic ${CPP11_FLAG}) + add_definitions(-Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic ${CPP11_FLAG}) if (APPLE) add_definitions(-Wno-sign-compare) diff --git a/include/chaiscript/dispatchkit/any.hpp b/include/chaiscript/dispatchkit/any.hpp index 217ce7f..75a01c0 100644 --- a/include/chaiscript/dispatchkit/any.hpp +++ b/include/chaiscript/dispatchkit/any.hpp @@ -42,6 +42,7 @@ namespace chaiscript { private: struct Data { + virtual ~Data() {} virtual void *data() = 0; virtual const std::type_info &type() const = 0; virtual std::shared_ptr clone() const = 0; @@ -56,6 +57,8 @@ namespace chaiscript { { } + virtual ~Data_Impl() {} + virtual void *data() { return &m_data; @@ -94,9 +97,9 @@ namespace chaiscript { } template - Any(const ValueType &t_value) + Any(const ValueType &t_value) + : m_data(std::shared_ptr(new Data_Impl(t_value))) { - m_data = std::shared_ptr(new Data_Impl(t_value)); } Any & operator=(const Any &t_any) diff --git a/include/chaiscript/dispatchkit/proxy_functions.hpp b/include/chaiscript/dispatchkit/proxy_functions.hpp index 6abc3aa..d5de855 100644 --- a/include/chaiscript/dispatchkit/proxy_functions.hpp +++ b/include/chaiscript/dispatchkit/proxy_functions.hpp @@ -39,6 +39,7 @@ namespace chaiscript { public: virtual ~Proxy_Function_Base() {} + Boxed_Value operator()(const std::vector ¶ms, const chaiscript::Dynamic_Cast_Conversions &t_conversions) const { Boxed_Value bv = do_call(params, t_conversions); @@ -205,6 +206,8 @@ namespace chaiscript { } + virtual ~Dynamic_Proxy_Function() {} + virtual bool operator==(const Proxy_Function_Base &rhs) const { const Dynamic_Proxy_Function *prhs = dynamic_cast(&rhs); @@ -221,9 +224,6 @@ namespace chaiscript && test_guard(vals, t_conversions); } - virtual ~Dynamic_Proxy_Function() {} - - virtual int get_arity() const { return m_arity;