Effective C++回顾(10)

原创 2006年06月06日 21:38:00

条款14:总是让base class拥有virtual destructor

 

我看过很多的面试试卷,基本上都会出跟这个条款相关类型的题目,由于这个条款涉及到设计一个类的基本知识问题。同时更多的时候,我们也要注意到类的大小和效率问题,因为在没有涉及到继承问题的情况下,增加一个virtual destructor会增加类的开销。

 

条款15:令operator=传回“*thisreference

 

理解这个条款对于设计一个优秀的类非常重要,因为对于程序语言来讲,能够采用自然的数学表达方式非常重要。同时我们在重载operator=操作符的时候,也要注意到一个效率问题,看下面这个例子:

class CMyString

{

public:

…..

       CMyString &operator=(const CMyString &other);

};

CMyString temp = “test string”;

如果在我们的代码中只针对const CMyString重载了=操作符,所以对于编译器来讲,在编译过程中会生成下面的代码:

const CMyString tempstring(“test string”);

CMyString temp = tempstring;

这就有一个效率问题了,如果我们考虑到这个问题,那么我们在重载=操作符的时候,对const char *也进行重载:

CMyString &operator=(const char *pOtherString);

这样我们程序的效率就大大提高了。

 

条款16:在operator=中为所有的data members设定内容

条款17:在operator=中检查是否“自己赋值给自己”

 

没话好说的,是一定要遵守的。

看似简单的一个operator=操作事实上包含了这么的内容,很多也可以说是一些陷井,如果你没有注意和理解它,那么你在书写程序的时候就会犯错。如果对自己写的类不放心,用C++ Test检查一下,它会告诉你很多信息的。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Effective C++笔记(10)—模板与泛型编程(二)

Effective C++笔记(10)—模板与泛型编程(二)

Effective Modern C++: Item 10 -> 优先选择scoped enums而不是unscoped enums

优先选择scoped enums而不是unscoped enums作为一个基本规则,在一个大括号里面声明一个名字会将其可见性限制在大括号定义的范围内。但是对于以C++98风格enum声明的枚举器就不再...

【Effective C++读书笔记】篇五(条款10~条款12)

条款10:令 operator = 返回一个 reference to *this                               ...

More Effective C++----(10)在构造函数中防止资源泄漏

Item M10:在构造函数中防止资源泄漏 如果你正在开发一个具有多媒体功能的通讯录程序。这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音...

More Effective C++之Item M10:在构造函数中防止资源泄漏

如果你正在开发一个具有多媒体功能的通讯录程序。这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音)。 为了实现这个通信录,你可以这样设计: ...

effective c++条款10-12(operator=(重载返回类型、自我赋值和深层复制))整理

一、重载operator=返回类型 下面举例说明,operator=类似。 针对:ostream & operator 说明几点: 1.第一个形参为对ostream对象的引用,在该对象上将产生输出,...

条款10: 如果写了operator new就要同时写operator delete (转自effective c++ second edition)

让我们回过头去看看这样一个基本问题:为什么有必要写自己的operator new和operator delete?答案通常是:为了效率。缺省的operator new和operator delet...

Effective C++之Item 10: 让assigment operator(赋值运算符)返回一个reference to *this

三个原因让你觉得这样做是明智的: (1)     返回引用可以节省资源,不必要为返回值调用构造函数了; (2)     形如(x = y) = 3这样的连等,编译器也能接受了,因为这样的写...

Effective C++读书笔记(10)

条款16:成对使用new和delete时要采取相同形式 Use the same form in corresponding uses ofnew and delete 当你对一个指针使用 del...

Effective C++ rule 10-11 赋值运算符注意点

前言在C++中,所有对象包括非类的成员以及类的成员变量在使用前都要尽量做到先初始化。如果使用没有初始化的对象,有些情况下会导致程序崩溃,有些情况不会崩溃但是程序会以一种不是我们想要的逻辑执行。因此,C...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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