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)