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. 深度复制,就是将指针指向的内容复制一份到本对象来。

 

 

posted @ 2013-05-17 15:07  大器天下  阅读(100)  评论(0编辑  收藏  举报