关于复制构造函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 21:12:12
你好,我在学习C++赋值运算符时,发现了一些古怪的复制构造函数的现象,还望大家能指点迷津。谢谢。

下面是一段关于如何对对象赋值的简单程序,可是我有一个地方不理解……

请大家分析一下:第二个复制构造函数是怎么来的?为什么会出现两个复制构造函数?第一个是创建临时对象时产生的,那第二个是怎么回事?

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

class sample {
char *s;
public:
sample();
sample(const sample &ob);
~sample( ) { if(s)delete [] s; cout << "析构函数运行,已释放s的空间\n"; }
void show() { cout << s << "\n"; }
void set(char *str);
sample operator=(sample &ob);
};

sample::sample()
{
s = new char('\0');
cout<<"普通构造函数\n";
}

sample::sample(const sample &ob)
{
s = new char[strlen(ob.s)+1];
strcpy(s, ob.s);
cout<<"复制构造函数\n";
}

void sample::set(char *str)
{
s = new char[strlen(s

sample operator=(sample &ob);

你返回的是一个临时变量。。

sample & operator=(sample &ob);

哪里来的第二个复制构造啊?

我找了好久也只找到一个复制构造函数.

sample operator=(sample &ob); //重载运算符

sample(const sample &ob); //复制构造函数.