[笔记]Effective C++12条(以initialization取代assignment动作)

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

#include<iostream>

#include<string>

using namespace std;

//////////

//由于class拥有point member,so我们不能用assignment和copy动作中发生aliasing(别名)

//所以你会想是否该实现这些函数,应该

//

//我们有两种方法,第一种member initialzation list,作为const,和reference merber只能被初

//始化;if 不改变其成员,我们应将他们都声明为const;在这种情况下也只能用init list

//且用init list即使没有const,init list还是比constructor 内的assignment好,原因是用init list时,只有

//一个string copy construtor调用,可用另一方面一种时却有一个construct,一个assignment,

//string类是很小,对于一些大型的类,这个调用是一个很大的成本,

//

//且还有一个好处,这种形式对以后的维护有很大的好处,不用再去constructor的实现函数中去

//修改,

//

//但当你有一大堆内建类型时,有一个事实,内建类型之non-const和non-reference对象,其init与assi没有任何差异

//你可以写成 init(){a=b=c=1,d=e=f=2;}它没有用户自定义类型的那些assi问题,

//

//还有一个问题就是对于static绝不应该在constuctor中被初始,一个static对象在程序只应该初始一次;至少不符合

//效率;

//////

template<class T>

class NamePtr{

public:

NamePtr(const string& initName,T* initPtr):name(initName),Ptr(initPtr){}

//{

//name=initName;

//Ptr=initPtr;

//}

private:

string nmae;

T* Ptr;

};

void main(){

;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航