background image

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

  

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

 C++初始化语法的不一致性:

C 语言确实很优雅,整个语言的设计简洁一致。而在 C++中,有一个让人诟病的问题就是
变量初始化的不一致性。

   C

 

语言中的初始化,都是用花括号进行,简单美观:

int

 array[] = {1,2,3,4,5};

struct

 Point point = {2, 3};

struct

 Point arrPoint[] = 

{
  {2,3},
  {4,5},
  {6,7}
};

   C++自然也兼容了 C 语言的初始化机制。然而,C++的 Class 乃至 STL 都不支持。它们要

 

 

用不同的方式来初始化, 甚至根本不能够直接初始化, 只能使用运行时的赋值。
   比如 Class

 

class

 Param

{

public

:

  

int

 Age;

  

int

 Value;

private

:

  

int

 Level;

};

Param param = {2,3}; 

// ERROR

Param param = {2,3,4}; 

//ERROR

   无法初始化。而如果不初始化的话,所有的成员而处于无政府状态,这显然很不让人放
心。于是,C++提供了专门用于 Class 的初始化方式--构造函数:

class

 Param

{

public

:

  Param(

int

 x, 

int

 y)

    : x_(x), y_(y)