在该示例中我们显式定义了复制构造函数来代替默认复制构造函数, 在该复制构造函数的函数体内, 不是再直接将源对象所申请空间的地址赋值给被初始化的对象, 而是自己独立申请一处内存后再将源对象的属性复制过来, 此时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;
}

05-27 09:49