拷贝构造函数在对象被创建时调用,赋值运算符只在已经存在的对象之间赋值时调用。
string.h
#include <string.h>
#include <iostream>
using std::cout;
using std::endl;
class String
{
public:
String(const char *str = NULL);
String(const String &str);
String & operator=(const String &str);
~String();
private:
char *m_data;
};
String::String(const char *str)
{
cout << "const char *" << endl;
if (NULL == str)
{
m_data = new char[1];
m_data[0] = '\0';
}
else
{
m_data = new char[strlen(str)+1];
strcpy(m_data, str);
}
}
String::String(const String &str)
{
cout << "const String &str" << endl;
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data, str.m_data);
}
String & String::operator=(const String &str)
{
cout << "operator=" << endl;
if (this == &str)
return *this;
delete []m_data;
m_data = new char[strlen(str.m_data)+1];
String::~String()
{
delete []m_data;
m_data = NULL;
}
main.cpp
#include "string.h"
int main()
{
const char *arr1 = "1111111111111";
String str1(arr1);
const char *arr2 = "2222222222222";
String str2(arr2);
str1 = str2;
String str3(str1);
return 0;
}
output:
const char *
const char *
operator=
const String &str
string.h
#include <string.h>
#include <iostream>
using std::cout;
using std::endl;
class String
{
public:
String(const char *str = NULL);
String(const String &str);
String & operator=(const String &str);
~String();
private:
char *m_data;
};
String::String(const char *str)
{
cout << "const char *" << endl;
if (NULL == str)
{
m_data = new char[1];
m_data[0] = '\0';
}
else
{
m_data = new char[strlen(str)+1];
strcpy(m_data, str);
}
}
String::String(const String &str)
{
cout << "const String &str" << endl;
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data, str.m_data);
}
String & String::operator=(const String &str)
{
cout << "operator=" << endl;
if (this == &str)
return *this;
delete []m_data;
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data, str.m_data);
return *this;
String::~String()
{
delete []m_data;
m_data = NULL;
}
main.cpp
#include "string.h"
int main()
{
const char *arr1 = "1111111111111";
String str1(arr1);
const char *arr2 = "2222222222222";
String str2(arr2);
str1 = str2;
String str3(str1);
return 0;
}
output:
const char *
const char *
operator=
const String &str