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

最新文章

  1. 【Java每日一题】20170104
  2. BZOJ4533 [BeiJing2014 WinterCamp] 数据
  3. hiho一下第二周 Trie树
  4. AP6181 正基 WIFI 模块
  5. 中石油—2的幂次方(power)
  6. PAT (Basic Level) Practise:1036. 跟奥巴马一起编程
  7. 解决IE6下Position:fixed问题(只用css)
  8. java保留两位小数的方法
  9. IDL实现 Modis经纬度查询、迅雷下载
  10. Servlet+Tomcat日志输出
  11. [ SSH框架 ] Hibernate框架学习之二
  12. 《前端之路》之 this 的使用技巧总结
  13. springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志
  14. 使用Badboy录制Web脚本 JMeter运行jmx脚本
  15. Win10连接远程桌面的时候提示您的凭证不工作该怎么办?
  16. “脚踢各大Python Web框架”,Sanic真有这能耐么?
  17. 【MySQL】【2】数字排序问题
  18. 【Unity】9.2 如何添加粒子组件
  19. spring mvc的@Transactional注解
  20. c#和java中封装字段的不同

热门文章

  1. 【UML】9种图+包图
  2. SPOJ - Distinct Substrings,求不同的字串个数!
  3. 九度oj 题目1214:丑数
  4. 【2018.10.10】[HNOI2008] GT考试(bzoj1009)
  5. 《Spring Security3》第四章第三部分翻译下(密码加salt)
  6. AtCoder Regular Contest 095E - Symmetric Grid
  7. JavaSE的static、final、abstract修饰符
  8. scrapy的allowed_domains设置含义
  9. SolidEdge如何为零件指定不同的颜色 给零件着色 给装配体着色
  10. ajax请求后台交互json示例