类中嵌套另一个类时,调用构造,析构,拷贝,赋值运算符等函数的次序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类中嵌套另一个类时,调用构造,析构,拷贝,赋值运算符等函数的次序相关的知识,希望对你有一定的参考价值。

class A

{

public:

A(int a = 0)

:a(a)

{

cout << "A()" << endl;

}

A(const A& other)

{

cout << "A&()" << endl;

}


A& operator =(const A& other)

{

cout << "operator = " << endl;

return *this;

}

~A()

{

cout << "~A()" << endl;

}

private:

int a;

};


class B

{

public:

//B( )  // B* const this 默认参数在此会有this对象会调用类A的构造函数构造自己的

//  //数据成员a

//{

// a = 0; // A()  A()  operator =  ~A  B() ~B()  ~A()  

// // a = 0   ===========  a.operator=(0);  

// // A& operator =(const A& other)函数 

// //在传参时用 0 调用类A的构造函数构造一个临时对象_a(0)给other

// // _a 出了类A的赋值运算符函数会自动调用类A的析构(形参嘛)

// cout << "B()" << endl;

//}


//B() // B* const this 默认参数  在此会有this对象会调用类A的构造函数构造自己的    

// // 数据成员a

// :a(0)   //A()  B()  ~B() ~A()

//{

// cout << "B()" << endl;

//}


B(A d = 0)   // B* const this 默认参数 在此会有this对象会调用类A的构造函数构造自己              

    // 的数据成员a

    //  参数 A d = 0; 会调用类A的构造函数构造对象d

{

a = d; // A()  A()  operator =   B()  ~A   ~B()  ~A() 

    // a = d   ===========  a.operator=(d);  

    // A& operator =(const A& other) 函数

// 在传参时引用传递,不会产生临时对象

// 形参 d 出了类B的构造函数会自动调用类A的析构


//如果A operator =(const A& other) 函数是值返回

//返回时会有一个无名对象产生  

// A()  A()  operator =  A&()  ~A  B() ~A  ~B() ~A() 

cout << "B()" << endl;

}


~B()

{

cout << "~B()" << endl;

}

private:

A a;

};


本文出自 “埋葬的记忆” 博客,请务必保留此出处http://10766929.blog.51cto.com/10756929/1759929

以上是关于类中嵌套另一个类时,调用构造,析构,拷贝,赋值运算符等函数的次序的主要内容,如果未能解决你的问题,请参考以下文章

2.拷贝控制操作(三/五法则)

C++拷贝控制含有指针成员的类

C++拷贝控制含有指针成员的类

构造函数 析构函数 拷贝构造函数 ~~~~~~~~~~构造函数

C++类与对象(详解构造函数,析构函数,拷贝构造函数,赋值重载函数)

C++类和对象