您的位置:首页 > 编程语言 > C语言/C++

Effective C++ 笔记

2008-11-06 15:10 169 查看
条款1:尽量用const和inline而不用#define

条款2:

条款3:尽量用new和delete而不用malloc和free
1.虽然分配了空间但是没有调用构造函数创建对象,释放时也不会析构。
2.delete[] array;

条款4:

条款5:对应的new和delete要采用相同的形式
delete[] array而不是delete array.
why?
如果没有用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

条款6:析构函数里对指针成员调用delete
删除空指针是安全的,在析构函数里可以直接简单地delete掉他们。

条款7:预先准备好内存不足的情况

条款11:如果类里需要动态内存分配,需要禁掉拷贝构造函数和赋值操作符
会出现两个问题,内存泄露,删除掉另一个指针指向的内存。
只要类里有指针,就需要写自己版本的拷贝构造函数和赋值操作函数。
一个技巧,为了防止有人去调用他们可以声名为private成员而不去实现他们。

条款12:尽量使用初始化不要在构造函数里赋值
重大不同
1.有些情况必须用初始化,const和引用数据成员只能用初始化而不能用赋值(初始化和赋值表面看起来是一样的其实是不一样的)
2.注意static成员永远不会在类的构造函数初始化。 类的静态成员要在类外定义。
3.效率原因,

条款13:初始化列表中成员列出的顺序和他们在类中的声名顺序一样
既然是只与类中的顺序相关那为什么本节里还要求把基类的初始化写在前面?

条款14:确定基类有虚析构函数
当通过基类的指针去删除派生类的对象,而基类又没有虚析沟函数时结果不可确定。
派生类的析构函数不会被调用
如果不考虑作为基类而把析构函数设计为虚函数是一个坏主意

条款19:分清成员函数非成员函数和友元函数
条款22:
切割问题

条款21:尽可能使用const
1.在指针申明中的*号的左边是常数据
2.const的强大的功能基于它在函数声名中的应用。
  const函数:不修改对象中的任何数据成员。
3.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ delete