Effective C++回顾(7)

原创 2006年05月25日 23:07:00

条款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的设计,而且这样工作的非常好。

 

待续……

Effective C++——》条款7:为多态基类声明virtual析构函数 .

严格来说,多态分为编译时多态和运行时多态,编译时多态是函数的重载,而运行时多态则是迟绑定技术,即根据基类指针或引用的实际指向来决定采取何种行动,一般来说,多态特指运行时多态。下面我们来举有关C++多态...

Effective C++(7) 为多态基类声明virtual析构函数 or Not

问题聚焦: 已经对一个对象执行了delete语句,还会发生内存泄漏吗?

Effective C++笔记(7)—实现

Effective C++笔记

Effective Modern C++ Item 7 总结:关于两种对象创建方法“()、{}”的区分

在用大括号进行初始化的时候有两个例外: 例外1. 空大括号意味着无参,而不是空的std::initializer_list. 在对象的定义中会调用类的无参构造函数。 例如有如下类定义: class W...
  • Jxianxu
  • Jxianxu
  • 2017年04月17日 09:56
  • 162

Effective C++ 第二版 7) 内存不够的情况

条款7 预先准备好内存不够的情况 operator new在无法完成内存分配请求时会抛出异常(老的编译器返回0);  C常用的做法, 定义一个类型无关的宏来分配内存并检查是否成功; ...

Effective C++读书笔记(7)

昨天偷懒了,今天补。 条款10:令operator=返回一个reference to *this Have assignment operators return areference t...

(原文)Effective C++条款7:为多态基类声明VIRTUAL析构函数

今天碰到一个bug,查了半天发现是某位虚基类没有定义虚析构函数,delete时导致派生类没有正确释放资源,遂从网上搜到一篇文章,留个记号 关于virtual desctructor的详细讨论。同样来...

<Effective Mordern C++>笔记:Item 7:Distinguish () and {} when creating objs.

从C++11开始,初始化有三种方式:括号,=赋值和列表(也可=后接列表)。 先看如下例子开个头://Widget是个自定义类Widget w1; // 调用默认构造函数 Widget w2 = w1;...
  • cqk0100
  • cqk0100
  • 2017年05月08日 19:39
  • 141

Effective C++ 学习笔记(7)

条款10 令赋值操作符返回一个*this对象的引用

Effective C++ 7

7.预先准备好内存不够的情况。 new在无法完成内存分配请求时,会抛出异常,异常了要怎么办,这是一个很现实且以后绝对要碰到的问题。 在c中一般使用宏来分配内存并检测分配是否成功,c++中类似以下函...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Effective C++回顾(7)
举报原因:
原因补充:

(最多只允许输入30个字)