/*复制构造函数可用于初始化顺序容器中的元素。例如,可以用表示容量的单 个形参来初始化容器。容器的这种构造方式使用默认构造函数和复制构造函数*/
// default string constructor and five string copy constructors invoked
vector
svec(5);
/*编译器首先使用 string 默认构造函数创建一个临时值来初始化 svec,然 后使用复制构造函数将临时值复制到 svec 的每个元素。*/
Code4:复制构造函数与数组元素
/*如果没有为类类型数组提供元素初始化式,则将用默认构造函数初始化每个 元素。然而,如果使用常规的花括号括住的数组初始化列表(第 4.1.1 节)来 提供显式元素初始化式,则使用复制初始化来初始化每个元素。根据指定值创建 适当类型的元素,然后用复制构造函数将该值复制到相应元素:*/
Sales_item primer_eds[] = { string("0-201-16487-6"),
string("0-201-54848-8"),
string("0-201-82470-1"),
Sales_item()
};
/*如前三个元素的初始化式中所示可以直接指定一个值,用于调用元素类型的 单实参构造函数。如果希望不指定实参或指定多个实参,就需要使用完整的构造 函数语法,正如最后一个元素的初始化那样。*/
Code5:合成的赋值操作符
// equivalent to the synthesized assignment operator
Sales_item&
Sales_item::operator=(const Sales_item &rhs)
{
isbn = rhs.isbn; // calls string::operator=
units_sold=rhs.units_sold; //uses built-in int assignment
revenue = rhs.revenue; //uses built-in double assignment
return *this;
}
/*合成赋值操作符根据成员类型使用适合的内置或类定义的赋值操作符,依次给每个成员赋值,该操作符返回 *this,它是对左操作数对象的引用。*/Code6:析构函数
class Sales_item {
public:
// empty; no work to do other than destroying the members,which happens automatically
~Sales_item() { }
// other members as before
};
/*撤销 Sales_item 类型的对象时,将运行这个什么也不做的析构函数,它执 行完毕后,将运行合成析构函数以撤销类的成员。合成析构函数调用 string 析 构函数来撤销 string 成员,string 析构函数释放了保存 isbn 的内存。 units_sold 和 revenue 成员是内置类型,所以合成析构函数撤销它们不需要做什么。*/http://blog.csdn.net/liufei_learning/article/details/21312701