拷贝(复制)构造函数和赋值函数

Posted czhoud

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拷贝(复制)构造函数和赋值函数相关的知识,希望对你有一定的参考价值。

String::String(const String &other)  //拷贝构造函数

{

    cout << "自定义拷贝构造函数" << endl;

    int length = strlen(other.m_data);

    m_data = new char[length + 1];

    strcpy(m_data, other.m_data);

}

String & String::operator=(const String &other) //赋值函数

{

    cout << "自定义赋值函数" << endl;

    if (this == &other)

    {   return *this;   }

    else

    {

        delete [] m_data;

        int length = strlen(other.m_data);

        m_data = new char[length + 1];

        strcpy(m_data, other.m_data); return *this;

    }

}

//////////////////////////////////////////////////////////////////////

1. 调用环境

     (1)当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数: 
     对象作为实参传入到函数形参    
     对象以值传递的方式从函数返回
     一个对象需要通过另外一个对象进行初始化。

    (2)operator=();是把一个对象赋值给一个原有的对象,所以如果原来的对象中有内存分配要先把内存释放掉,而且还要检查一下两个对象是不是同一个对象,如果是的话就不做任何操作。

以上是关于拷贝(复制)构造函数和赋值函数的主要内容,如果未能解决你的问题,请参考以下文章

c++中拷贝构造函数和赋值运算符重载本质上一样么

c++ 拷贝构造函数与赋值运算符重载函数的区别是

复制构造函数和赋值运算符

复制构造函数与赋值运算符(=)有何不同

拷贝构造函数 和 赋值操作符重载

[QT入门篇]3 QObject的拷贝构造函数与赋值运算符