为什么为单个赋值操作调用复制构造函数和重载赋值运算符

Why copy constructor and overloaded assignment operator are being called for a single assignment operation?

本文关键字:构造函数 重载 赋值运算符 复制 调用 单个 赋值 操作 为什么      更新时间:2023-10-16

>我正在用 c++ 编写一个 String 类,但当我看到重载构造函数和重载赋值运算符被单个赋值操作调用时,我感到困惑。我认为在b ="检查"行中,字符串首先转换为String对象,因此调用了重载构造函数,然后调用了重载赋值运算符。

String::String(const char* s)
{ 
    cout << "Overloaded Constructor::Stringn";
        if (s != NULL)
        {
        size = strlen(s);
        bufferPtr = new char[size+1];
        strcpy(bufferPtr,s);
    }
    else
    {
        bufferPtr = NULL;
        size = 0;
    }
}
String & String::operator=(const String&rhs)
{
    cout << "Operator=::Stringn";
   if (this != &rhs) // check same assignment
   { 
       size = rhs.size;
        delete [] bufferPtr;
        if(rhs.size != 0)
        {
            bufferPtr = new char[rhs.size+1];
            strcpy(bufferPtr,rhs.bufferPtr);
        }
        else bufferPtr = NULL;
    }
    return *this;
}
String a = "FName";
String b("LUsama");
b = "Check";
`
Output:
Overloaded Constructor::String
Overloaded Constructor::String
Overloaded Constructor::String
Operator=::String

好吧,让我们看看...

  1. a构造函数
  2. b构造函数
  3. 临时对象构造函数(包含"检查"字符串(
  4. 临时对象通过操作员分配给b

正如输出所示。什么让你感到困惑?