• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    4年前 (2014-10-04)  OpenCv |   抢沙发  18 
    文章评分 0 次,平均分 0.0

    如果申请的内存小于fixed_size,则直接使用_Tp buf[fixed_size],否则重新分配更多字节。

    template<typename _Tp, size_t fixed_size=4096/sizeof(_Tp)+8> class CV_EXPORTS AutoBuffer
    {
    public:
        typedef _Tp value_type;
    
        AutoBuffer();
        AutoBuffer(size_t _size);
        ~AutoBuffer();
    
        void allocate(size_t _size);
        void deallocate();
        operator _Tp* ();
        operator const _Tp* () const;
    
    protected:
        _Tp* ptr;
        size_t size;
        _Tp buf[fixed_size];
    };
    
    
    template<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::AutoBuffer()
    : ptr(buf), size(fixed_size) {}
    
    template<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::AutoBuffer(size_t _size)
    : ptr(buf), size(fixed_size) { allocate(_size); }
    
    template<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::~AutoBuffer()
    { deallocate(); }
    
    template<typename _Tp, size_t fixed_size> inline void AutoBuffer<_Tp, fixed_size>::allocate(size_t _size)
    {
        if(_size <= size)
            return;
        deallocate();
        if(_size > fixed_size)
        {
            ptr = cv::allocate<_Tp>(_size);
            size = _size;
        }
    }
    
    template<typename _Tp, size_t fixed_size> inline void AutoBuffer<_Tp, fixed_size>::deallocate()
    {
        if( ptr != buf )
        {
            cv::deallocate<_Tp>(ptr, size);
            ptr = buf;
            size = fixed_size;
        }
    }
    
    template<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::operator _Tp* ()
    { return ptr; }
    
    template<typename _Tp, size_t fixed_size> inline AutoBuffer<_Tp, fixed_size>::operator const _Tp* () const
    { return ptr; }
     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/3753.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享