C++11 scope exit guard, a good idea?

前端 未结 10 813
囚心锁ツ
囚心锁ツ 2020-12-08 05:00

I\'ve written a small utility class for C++11 which I use as a scope guard for easier handling of exception safety and similar things.

Seems somewhat like a hack. Bu

10条回答
  •  醉酒成梦
    2020-12-08 05:37

    The implementation could be very much simplified using tr1::function and tr1::unique_ptr, as below:

    namespace detail
    {
        class ScopeGuard
        {
        public:
            explicit ScopeGuard(std::function onExitScope) 
                : onExitScope_(onExitScope), dismissed_(false)
            { }
    
            ~ScopeGuard()
            {
                try
                {
                    if(!dismissed_)
                    {
                        onExitScope_();
                    }
                }
                catch(...){}
            }
    
            void Dismiss()
            {
                dismissed_ = true;
            }
        private:
            std::function onExitScope_;
            bool dismissed_;
    
            // noncopyable
        private:
            ScopeGuard(ScopeGuard const&);
            ScopeGuard& operator=(ScopeGuard const&);
        };
    }
    
    inline std::unique_ptr CreateScopeGuard(std::function onExitScope)
    {
        return std::unique_ptr(new detail::ScopeGuard(onExitScope));
    }
    

提交回复
热议问题