这条语句调用的不是拷贝构造函数,到底是什么样的构造函数呢?

最近又碰到了拷贝构造函数的问题,又复习了网易云课堂《C++程序设计入门》这方面的内容,看到崔毅东老师的一段代码,心中有了一些疑问,想要问问大家:

主函数是这样写的:
Person person1(111, 1970, 5, 3);
Person person2(222, 2000, 11, 8);
person1 = Person(person2);//有疑问的是这一句,他到底调用的是什么样的构造函数呢?我知道肯定不是拷贝构造函数,因为拷贝构造函数的格式是这样的:Person person1(person2);且是在person1刚定义时进行的操作.

下面是本程序中Person类构造函数的声明:
 Person(int id, int year, int month, int day);//仅这一个构造函数

2个回答

按理来说第二句会调用一个拷贝构造,一个拷贝赋值,但是编译器会做优化,做完优化可能就只做一个构造了,这个有可能是 这样,你可以试试

class Example
{
public:
    Example();   //默认函数
    ~Example();  //析构函数
    Example(int n); //重构函数
    Example(const Example&); //拷贝构造函数
    Example& operator = (const Example&); //赋值符重载

public:
    char *pBuffer;
    int nSize;
};

Example::Example()
{
    pBuffer = NULL; 
    nSize = 0;
}

Example::Example(const Example& RightSides)
{
    pBuffer=NULL;
    *this = RightSides; 
}

Example::~Example()
{
    if (pBuffer != NULL)
    {
        delete pBuffer;
    }
}

Example& Example::operator = (const Example& RightSides)
{
    nSize = RightSides.nSize;
    char *temp = new char[nSize];
    memcpy(temp, RightSides.pBuffer, nSize*sizeof(char));
    delete []pBuffer; 
    pBuffer = temp;
    return *this;
}

Example::Example(int n)
{
     pBuffer = new char[n]; 
     nSize = n;
}


int main()
{
    Example A(40),B(60);

    A = B;

    return 0;
} 
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问