From f27739cf7183a0f9cbdffaa7e29c7b47b25b0508 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 9 Jul 2012 16:20:55 -0600 Subject: [PATCH] Use unique_ptr instead of shared_ptr in our any implementation, >10% speed improvement --- include/chaiscript/dispatchkit/any.hpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/include/chaiscript/dispatchkit/any.hpp b/include/chaiscript/dispatchkit/any.hpp index e8dcfb8..2298858 100644 --- a/include/chaiscript/dispatchkit/any.hpp +++ b/include/chaiscript/dispatchkit/any.hpp @@ -44,7 +44,7 @@ namespace chaiscript { { virtual void *data() = 0; virtual const std::type_info &type() const = 0; - virtual std::shared_ptr clone() const = 0; + virtual std::unique_ptr clone() const = 0; }; template @@ -66,16 +66,16 @@ namespace chaiscript { return m_type; } - std::shared_ptr clone() const + std::unique_ptr clone() const { - return std::shared_ptr(new Data_Impl(m_data)); + return std::unique_ptr(new Data_Impl(m_data)); } const std::type_info &m_type; T m_data; }; - std::shared_ptr m_data; + std::unique_ptr m_data; public: // construct/copy/destruct @@ -94,7 +94,7 @@ namespace chaiscript { template Any(const ValueType &t_value) { - m_data = std::shared_ptr(new Data_Impl(t_value)); + m_data = std::unique_ptr(new Data_Impl(t_value)); } Any & operator=(const Any &t_any) @@ -131,9 +131,7 @@ namespace chaiscript { // modifiers Any & swap(Any &t_other) { - std::shared_ptr data = t_other.m_data; - t_other.m_data = m_data; - m_data = data; + std::swap(m_data, t_other.m_data); return *this; }