zoukankan      html  css  js  c++  java
  • 简单的 smartpointer

    水水地 发第一篇blog, 瘦身版的smartpointer。

    template <typename T>
    class CountedPtr {
    private:
        T* ptr;     
        long* count; // 计数指针
    public:
    
        explicit CountedPtr( T* p = nullptr ) :
            ptr( p ), count( new long( 1 ) ) {}
    
        CountedPtr( const CountedPtr<T>& p ) throw()  // vs 还不支持 noexcept。。。
            :
            ptr( p.ptr ), count( p.count ) {
            ++*count;   //没copy 一次 计数 +1
        }
    
        ~CountedPtr() throw() {
            dispose();  // 计数-1 并判断是否为0, 如果为0, 则释放内存
        }
        CountedPtr<T>& operator= ( const CountedPtr<T>& p ) throw() {
            if ( this != &p ) {     // 证同测试
                dispose();          // Scott Meyers 所摒弃的 方法, effective C++ 中
                ptr = p.ptr;        // 是先制作副本, 再swap 。 代码相当精炼
                count = p.count;
                ++*count;
            }
            return *this;
        }
    
        T& operator*() const throw() {
            return *ptr;
        }
        T* operator->() const throw() {
            return ptr;
        }
    
    private:
        void dispose() {
            if ( --*count == 0 ) {
                delete count;
                delete ptr;
            }
        }
    };
  • 相关阅读:
    canvas的基本用法
    h5新增属性
    jquery中遍历
    git版本控制器
    bootstrap-datetimepicker时间插件
    layer.load的使用
    ajax请求json中的数据
    h5中input的request属性提示文字字段
    layUI
    v-show v-if 的使用
  • 原文地址:https://www.cnblogs.com/yeahpeng/p/3800682.html
Copyright © 2011-2022 走看看