More Effective C++
文章平均质量分 85
HAN-Kai
这个作者很懒,什么都没留下…
展开
-
条款8:了解不各种不同意义的new和delete 练习
MoreEffectiveC++练习 条款8:了解不各种不同意义的new和delete new operator做两件事:1,调用operator new 分配内存;2, 调用constructor operator new是一个函数: void* operator(size_t size);只分配内存,不调用构造函数。而且operator new返回的是void*型 例子: #原创 2012-10-29 15:45:46 · 888 阅读 · 0 评论 -
条款26的一个补充小例子
一个补充小例子: #include using namespace std; class Printer { private: Printer(){cout<<"Printer()"<<endl;} public://注意这里是public,如果不是public,则CPFMachine():p(Printer::thePrinter())会报错原创 2012-11-21 19:33:58 · 833 阅读 · 0 评论 -
条款26:限制某个class所能产生的对象数量
允许0个或1个对象 方法1:private constructor + global friend #include using namespace std; class Printer { private: Printer(){cout<<"Printer()"<<endl;} friend Printer& thePrinter();原创 2012-11-21 18:16:35 · 752 阅读 · 0 评论 -
条款25:将constructor 和non-member function虚化
1.构造函数虚化 首先,构造函数是不能是虚函数的。见:构造函数为什么不能是虚函数 条款25所指的都是行为上类似虚构造函数,并不是真正的把构造函数实现的虚化。见MEp123. 有一种特别的virtual constructor--所谓virtual copy constructor。返回一个指针,指向其调用者(某对外)的一个新副本。 #include using namespace原创 2012-11-13 14:29:05 · 815 阅读 · 0 评论 -
条款31 让函数根据一个以上的对象类型来决定如何虚化
普通函数重载 #include using namespace std; class SpaceShip; class SpaceStation; class Asteriod; class GameObject { public: }; class SpaceShip: public GameObject { public: }; class SpaceStati原创 2012-11-27 15:20:38 · 785 阅读 · 0 评论 -
条款19了解临时对象的来源 练习
例1 #include using namespace std; class Base { public: int a; int b; Base(){cout<<"base"<<endl;} Base(Base &b){cout<<"base(&)"<<endl;}原创 2012-10-30 22:46:30 · 829 阅读 · 0 评论 -
条款13 以by reference 传 exception 练习
例1:pass by value 拷贝两次对象 #include using namespace std; class Base { public: Base(){cout<<"base"<<endl;} Base(Base &b){cout<<"base(&)"<<endl;} ~Base(){co原创 2012-10-30 17:04:22 · 591 阅读 · 0 评论 -
条款8中placement new练习
Placement new见ME,p39. 有时有一些分配好的内存,你需要在上面构造对象。有一个特殊版本的operator new,称为placement new。 练习: #include using namespace std; class Base { public: Base(){cout<<"base"<<endl;} ~Base(){co原创 2012-10-29 16:55:48 · 670 阅读 · 0 评论 -
带有private constructors的class不能被继承
实例: 代码如下 #include using namespace std; class Base { private: Base(){cout<<"Base()"<<endl;} }; class Derived:public Base { public: Derived(){cout<<"Derived"<<原创 2012-11-22 18:55:50 · 1180 阅读 · 0 评论