Effective C++ -----条款19:设计class犹如设计type

Class的设计就是type的设计。在定义一个新type之前,请确定你已经考虑过本条款覆盖的所有讨论主题。

  新type的对象应该如何被创建和销毁?

  对象的初始化和对象的赋值该有什么样的区别?

  新type的对象如果被passed by value(以值传递),意味着什么?

  什么是新type的“合法值”?

  你的新type需要配合某个继承图系(inheritance graph)吗?

  你的新type需要什么样的转换?

  什么样的操作符和函数对此新type而言是合理的?

  什么样的标准函数应该驳回?

  谁该取用新type的成员?

  什么是新type的“未声明接口”(undeclared interface)?

  你的新type有多么一般化?

  你真的需要一个新type吗?

时间: 2024-10-19 08:40:12

Effective C++ -----条款19:设计class犹如设计type的相关文章

<<Effective c++>>读书笔记---条款19:设计class犹如设计type

想要设计出高效的classes首先你必须了解你面对的问题.几乎每一个class都要求你面对一下提问,而你的回答往往导致你的设计规范: 新type的对象应该如何被创建和销毁? 构造函数.析构函数应该怎么写 对象的初始化和对象的赋值该有什么样的差别? 对象的赋值要注意资源的拷贝,初始化直接调用构造函数,而赋值会调用拷贝构造函数或赋值操作符= 新type的对象如果被passed by value(以值传递),意味着什么? 调用了拷贝构造函数,注意深拷贝和浅拷贝 什么是type的"合法值"?

条款19:设计class犹如设计type

1,新的type对象应该如何被创建和销毁? 这会影响class的构造函数ctor和析构函数dtor,以及内存分配函数和释放函数   //operator new //operator new[] //operator delete //operator delete[] 2,对象的初始化和对象的赋值该有什么什么区别? 初始化在于构造函数ctor 对象的赋值在于assigment操作符//operator = 3,新type的对象如果被passed by value意味着什么? 意味着产生一个co

[019]设计class犹如设计type

前言 我们在编写程序的时候,无论哪一种语言,总是会告诉你这种语言应该有的类型.我们将它们直接拿来使用,可是从来没有考虑过这些类到底是怎么设计出来的! 所幸的是:在OOP中,每当我们定义一个新的class,也就相当于定义了一个新type. 那么,一个好的type是怎样设计出来的呢?我们需要考虑哪些事情呢? 1,新type的对象应该如何创建和销毁? 包括构造和析构函数,内存分配和释放函数(operator new, operator delete,operator new[], operator d

《Effective C++》学习笔记——条款19

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 四.Designs and Declarations Rule 19:Treat class design as type design 规则 19:设计class犹如设计type C++就像在其他OOP(面向对象编程)语言一样,当你定义一个新的class,也就

Effective C++ 条款八 别让异常逃离析构函数

class DBConn //这个class用来管理DBConnction对象 { public:   //自己设计一个新的DBConn接口 方法3 void close() { db.close(); closed = true; }     ~DBConn() //确保数据库连接总是会被关闭 { //db.close();   if (!closed) { try { db.close(); } catch() { //制作运转记录,记下对close的调用失 } } } protected:

Effective C++ 条款七 为多态基类声明virtual析构函数

class TimeKeeper { public: TimeKeeper(); // ~TimeKeeper(); 错误,此作为一个基类,被继承了.其继承类被delete后,基类被销毁,但继承类可能没被销毁 virtual ~TimeKeeper();//必须声明为virtual类型才可以. protected: private: };   class AtomicClock: public TimeKeeper{}; //继承   TimeKeeper* ptk = getTimeKeepe

Effective C++ 条款六 若不想使用编译器自动生成的函数,就该明确拒绝

class HomeForSale //防止别人拷贝方法一:将相应的成员函数声明为private并且不予实现 { public: private: HomeForSale(const HomeForSale&); HomeForSale& operator = (const HomeForSale&);//只有申明,此函数很少被使用   };   //方法二,设计一个专门用来阻止copying动作的基类,然后让其他类继承这个类即可   class Uncopyable { prot

Effective C++ 条款15、16 在资源管理类中提供对原始资源的访问||成对使用new 与 delete要采取相同形式

1.在资源管理类中提供对原始资源的访问     前几个条款很棒,它们是对抗资源泄露的壁垒,但很多APIs直接指向 资源,这个时候,我们需要直接访问原始资源.     这里,有两种方法解决上述问题,我们可将RAII对象转换为原始资源.通过 显式转换与隐式转换.     通常,tr1:: shared_ptr 和 auto_ptr 都提供一个get成员函数,用来执行显式转换,也就是返回智能指针内部的原始指针的复件.因为它也重载了指针取值操作符* –>.当然也可以通过隐式转换为底部原始指针.     

排水管设计软件,能设计复杂的排水网络 MIDUSS v2.25 rev 473 1CD

排水管设计软件,能设计复杂的排水网络 MIDUSS v2.25 rev 473 1CDAAS MIDUSS V2.2 (排水管设计软件) AAS MIDUSS 它是一种windows下的排水管设计软件.能帮助你设计复杂的排水网络. CAE.Datamine.Studio.v3.23.52.0 1CD 矿山软件CAE.NPV.Scheduler.v4.22.250.0 1CD(原名Datamine)矿山开采优化软件 LARS Bridge 06.00.01.07 Win32_64 2CD Ment