在该示例中我们显式定义了复制构造函数来代替默认复制构造函数, 在该复制构造函数的函数体内, 不是再直接将源对象所申请空间的地址赋值给被初始化的对象, 而是自己独立申请一处内存后再将源对象的属性复制过来, 此时book1对象的 book_name 与 book2 对象的 book_name 就是指向两处不同的内存单元, 这样即便是源对象 book1 被销毁后被初始化的对象book2也不会再受到影响。
#include <iostream>
using namespace std;
class book
{
private:
char * book_name;
public:
book(const char * name)
{
cout << "create space\n";
book_name = new char [strlen(name) +1];
strcpy(book_name, name);
}
book(const book & b)
{
cout << "create space also\n";
book_name = new char [strlen(b.book_name) + 1];
strcpy(book_name, b.book_name);
}
~book()
{
cout << "delete space\n";
delete [] book_name;
}
void show_book()
{
cout << "book_name: " << book_name << endl;
}
};
int main()
{
book BOOK1("c++ primer plus");
book BOOK2(BOOK1);
BOOK1.show_book();
BOOK2.show_book();
return 0;
}