分类: C/C++
2007-03-07 15:15:07
几乎所有的类都有一个或多个构造函数,一个析构函数和一个赋值操作符。
构造函数控制对象生成时的基本操作,并保证对象被初始化;
析构函数摧毁一个对象并保证它被彻底清除;
赋值操作符则改变对象的值。
条款11: 为需要动态分配内存的类声明自己版本的拷贝构造函数和赋值操作符
否则,使用赋值操作符时,C++编译器会调用缺省的赋值操作符函数,这可能回导致问题:内存泄露,野指针等.举个例子
// 一个很简单的string类
class string {
public:
string(const char
*value);
~string();
... // 没有拷贝构造函数和operator=
private:
char *data;
};
string a("hello"); // 定义并构造 a
{ // 开一个新的生存空间
string
b("world"); // 定义并构造 b
...
b = a; // 执行
operator=,
// b原来的内存丢失了
} // 离开生存空间, 调用b的析构函数,a原来的内存也被释放
string c = a; // c.data
的值不能确定! 因a.data已被删除