zoukankan      html  css  js  c++  java
  • C/C++拾遗(三)

    C++中定义常量的途径:

    1. C中的#define预处理宏
    2. 类型安全的全局const
    3. 最小作用于enum

    一定不要在析构函数中执行一些可能抛出异常的动作


    智能指针

    智能指针的代码

    class U_Ptr
    {
        friend class HasPtr;
        int *ip;
        size_t use;
        U_Ptr(int *p) : ip(p), use(1){}
        ~U_Ptr(){delete ip;}
    };
    
    class HasPtr
    {
    public:
        HasPtr(int *p, int i) : ptr(new U_Ptr(p)), val(i){}
        HasPtr(HasPtr const & orig) : ptr(orig.ptr), val(orig.val){ ++ptr->use; }
        HasPtr & operator = (HasPtr const &rhs)
        {
            ++rhs.ptr->use;
            if(--ptr->use == 0)
                delete ptr;
            ptr = rhs.ptr;
            val = rhs.val;
            return *this;
        }
        ~HasPtr()
        {
            if(--ptr->use == 0)
                delete ptr;
        }
    private:
        U_Ptr * ptr;
        int val;
    };
    View Code

    在类中有指针成员的话,一定要注意,一般有三种方法来管理指针成员:

    1. 常规的不作为,就是啥也不改,像使用其他成员一样使用指针成员
    2. 智能指针,指针指向的对象是共享的,用引用计数来确实是否要删除共享的对象
    3. 深度复制,就是将指针指向的内容复制一份到本对象来。
  • 相关阅读:
    为什么要用getBaseContext()方法代替this?(转)
    如何让EditText不能自动获取焦点(转)
    context和getApplicationContext()的区别
    Idea 破解
    mysql 免安装
    AngularJS
    GC垃圾回收机制
    JVM类加载机制
    线程池
    面试-数据库
  • 原文地址:https://www.cnblogs.com/7ants/p/3083724.html
Copyright © 2011-2022 走看看