![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
effective c++学习笔记
文章平均质量分 71
yangshun2008
这个作者很懒,什么都没留下…
展开
-
条款06: 若不想使用编译器自动生成的函数,就该明确拒绝
如果我们不想使用编译器自动生成的函数,但是你自己又不想提供自己编写的这些编译器可以自动生成的函数给自己或别人使用,此时,你可以将自己编写的这些函数声明为private。我们有一个class HomeForSale,但是我们不希望别人使用HomeForSale中的copy 构造函数和copy assignment操作符,我们可以这样设计此类。class HomeForSale{public: H原创 2009-10-21 18:32:00 · 476 阅读 · 0 评论 -
条款09:绝不在构造和析构过程中调用virtual函数
我们设计一个class继承体系来模拟交易如买进、卖出的订单,对于每一笔交易,我们会在审计日志中创建相应的记录,也许我们会这样设计该class体系class Transaction{public: Transaction(); virtual void logTransaction() const = 0;};Transaction::Transaction(){ cout logTran原创 2009-10-21 18:38:00 · 442 阅读 · 0 评论 -
条款10:令operator= 返回一个reference to *this
以前没有太注意在重载类的赋值操作时,为什么总是返回一个类类型的引用。下面我们来看看这是为什么:class CExample{public: CExample (const string &str, int v) : m_str(str), m_val(v) { } void operator=(const CExample &rhs); CExample& operator+=(const原创 2009-10-22 18:34:00 · 475 阅读 · 0 评论 -
条款11:在operator= 中处理“自我赋值”
我们来看看下面一段代码,class Widget中自己实现了拷贝构造函数class Bitmap{};class Widget{public: Widget () { pb = new Bitmap; } Widget& operator=(const Widget &rhs);private: Bitmap *pb;};下面有三种方式对Widget& operator=(const原创 2009-10-23 17:49:00 · 728 阅读 · 1 评论 -
条款12:复制对象时勿忘其每一个成分
当我们编写一个copying函数,请确保(1)复制所有local成员变量,(2)调用所有base class内的适当的copying函数下面我们来看一个例子怎样来具体实现子类的copying函数void logCall(const string &funcNmae){ cout }class Customer{public: Customer(const string &strname) :原创 2009-10-23 17:51:00 · 417 阅读 · 0 评论 -
条款17:以独立语句将newed对象置入智能指针
假设我们有一个函数用来揭示处理程序的优先权,另外一个函数用来在某动态分配所得的Widget上进行某些带有优先权的处理: int Priority(); void ProcessWidget(std::auto_ptr pw, int priority); 由于谨记“以对象管理资源”的智慧铭言,processWidget决定对其动态分配得来的Widget运用智能指针。 现在我们来调用这原创 2009-10-28 18:08:00 · 384 阅读 · 0 评论 -
条款20:宁以pass-by-reference-to-const替换pass-by-value
我们考虑以下class继承体系: class Person { public: Person(); virtual ~Person(); ... private: string name; string address; }; class Student : public Person { public: Student(); ~Student(); ... privat原创 2009-10-30 13:59:00 · 474 阅读 · 0 评论 -
条款33:避免遮掩继承而来的名称
1)derived classes 内的名称会遮掩base classes内的名称,在public继承下从来没有人希望如此;2)为了让被遮掩的名称再见天日,可使用using声明式或转交函数(forwarding functions)。原创 2010-04-13 09:59:00 · 325 阅读 · 0 评论 -
条款32:确定你的public继承塑模出is-a关系
1) 应该宁可采取“在编译器拒绝企鹅飞行”的设计,而不是“只在运行期才能侦测他们”的设计;2) “public继承”意味着is-a。适用于base classes身上的每一件事情一定也适用于derived classes 身上,因为每一个derived class对象也都是一个base class对象。原创 2010-04-13 09:58:00 · 374 阅读 · 0 评论