拷贝控制

 如果一个构造函数第一个参数是自身类型的引用,且任何额外参数都具有默认值,则此构造函数是拷贝构造函数

class Foo{
public:
   Foo();     //默认构造函数
   Foo(const Foo&);    //拷贝构造函数  
};

  拷贝初始化与直接初始化

  

string dots(10,'.');     //直接初始化
string s(dots);           //直接初始化
string s2=dots;         //拷贝初始化
string null_book="123";         //拷贝初始化
string nines=sring(100,'9');    //拷贝初始化

  拷贝初始化不仅在我们用=定义变量时会发生,在下列情况也会发生

  将一个对象作为实参传递给一个非引用类型的形参

  从一个返回类型为非引用类型的函数返回一个对象

  用花括号列表初始化一个数组中的元素或一个聚合类中的成员

析构函数

 

class Foo{
public:
   Foo();     //默认构造函数
   Foo(const Foo&);    //拷贝构造函数  
   ~Foo(); //析构函数 
};

  在一个析构函数中,首先执行函数体,然后销毁成员,成员按初始化顺序逆序销毁

什么时候会调用析构函数

  无论何时一个对象被销毁,就会自动调用析构函数

    变量离开其作用域时被销毁

    当一个成员别销毁时,其成员被销毁

    容器被销毁时,其元素被销毁,

    对于动态分配的对象,当只想它的指针应用delete运算符时被 小虎

    对于临时对象当创建它的完整表达式结束时被销毁

猜你喜欢

转载自www.cnblogs.com/lIllIll/p/10901278.html
今日推荐