C++类的静态成员& 赋值vs初始化

  1. C++静态成员是类的行为而不是对象的行为
  2. C++静态成员的用途之一是统计有多少个对象实际存在
  3. 静态成员的初始化:在类的外面
    形式:
    数据类型类名::静态数据成员名=初值
  4. 赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是 简单地复制类中的每个成员。
  5. 赋值和初始化对于基本的数据类型差别不大
  6. 举个例子看初始化和赋值: 初始化的构造过程比较简单:先分配一个足够大的空间然后填充上数据:
    String::String( const char *init ) …{
    if( !init ) init = “”“”;
    s_ = new char[ strlen(init)+1 ];
    strcpy( s_, init );
    }
    析构过程更简单:
    String::~String() …{ delete [] s_; }

但是如果赋值操作就复杂多了:
String &String::operator =( const char *str ) …{

if( !str ) str = “”“”;

char *tmp = strcpy( new char[ strlen(str)+1 ], str ); // 多了中间变量

delete [] s_; // 多了删除s_;
s_ = tmp;  // 多一个赋值操作!现在是指向字符的指针,如果是个大对象,效率的差别可想而知.

return *this;
}
7. Boost的assign库做了许多有益的工作。使用assign库,至少现在可以初始化了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值