关闭

Effective C++回顾(7)

1073人阅读 评论(0) 收藏 举报

条款11:如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符

在内存分配的时候,增加copyassignment运算符没有问题,可是在很多情况下仅仅通过增加copyassignment还不能完成任务,我自己就碰到过这种问题:

class CMyLibrary

{

public:

       CMyLibrary(LPCTSTR lpszLibName)

{

       m_hInst = ::LoadLibrary(lpszLibName);

}

~CMyLibrary()

{

       if (m_hInst)

{

       ::FreeLibrary(m_hInst);

}

}

private:

       HINSTANCE m_hInst;

}

实现这个类用于管理DLL,在这种情况下就很难实现copyassignment功能,因为我们还没有办法Copy出一个HINSTANCE。我们也许可以采用attach功能的实现,在copyassignment函数中传入的时候没有const值,允许copyassignment函数修改其值。这当然是一种方法,终归不是最优方法,不仅失去了copyassignment操作符的原意,而且还失去了强大的const作用(犯了第一条)。后来我自己实现了一个share_library类,在这个share_library类中采用引用计数来管理HINSTANCE句柄,在每次调用copyassignment的功能的时候,自身的引用计数减1,把传入值的引用计数加1,类似于COM的设计,而且这样工作的非常好。

 

待续……

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:270540次
    • 积分:3816
    • 等级:
    • 排名:第8374名
    • 原创:92篇
    • 转载:5篇
    • 译文:24篇
    • 评论:61条
    文章分类