《C++沉思录》将计数器和对象分离开

原创 2006年06月15日 09:45:00

class point
{
public:
 point(int x = 0, int y = 0) : xval(x), yval(y) { }
 int x(void) const { return xval; }
 int y(void) const { return yval; }
 point &x(int xv) { xval = xv; return *this; }
 point &y(int yv) { yval = yv; return *this; }
private:
 int xval, yval;
};

class useCount
{
public:
 useCount(void) : p(new int(1)) { }
 useCount(const useCount& u) : p(u.p) { ++*p; }
 useCount& operator=(const useCount&);
 
 bool Only(void) { return *p == 1; }
 bool reattach(const useCount &u)
 {
  ++*u.p;
  if (--*p == 0)
  {
   delete p;
   p = u.p;
   return true;
  }
  p = u.p;
  return false;
 }
 bool makeOnly(void)
 {
  if (*p == 1)
  {
   return false;
  }
  --*p;
  p = new int(1);
  return true;
 }

 ~useCount(void)
 {
  if (--*p == 0)
  {
   delete p;
  }
 }
private:
 int *p;
};


class Handle
{
public:
 Handle(void) : up(new point) { }
 Handle(int x,int y) : up(new point(x, y)) { }
 Handle(const point& p) : up(new point(p)) {}
 Handle(const Handle& h) :up(h.up), u(h.u){}
 Handle& operator=(const Handle &h)
 {
  if (u.reattach(h.u))
  {
   delete up;
  }
  up = h.up;
  return *this;
 }

 int x(void) const
 {
  return up->x();
 }
 Handle& x(int x0)
 {
  if (u.makeOnly())
  {
   up = new point(*up);
  }
  
  up->x(x0);
  return *this;
 }
 ~Handle(void)
 {
  if (u.Only())
  {
   delete up;
  }
 }

private:
 point *up;
 useCount u;
};

C++ 沉思录》阅读笔记——类的反思

类这个概念无非是数据和方法的集合,为什么我一直困惑呢?为什么不弄清楚呢? C++中的类这个概念里有4个函数比较特殊,像我这种以前有C经验的人可能一时难以适应,它们是构造函数、析构函数、复制构造函...
  • flora_yao
  • flora_yao
  • 2015年07月02日 18:02
  • 632

《C++沉思录》读书笔记之代理类

#include #include int main() { int i; for( i=0;i
  • KangRoger
  • KangRoger
  • 2014年06月11日 21:00
  • 1133

[沉思录(中英双语)·典藏本].(古罗马)奥勒留.扫描版.PDF 免费下载

下载地址:[沉思录(中英双语)·典藏本].(古罗马)奥勒留.扫描版.PDF
  • jiongyi1
  • jiongyi1
  • 2017年11月13日 21:48
  • 203

读书笔记∣概率论沉思录 01

读书笔记:概率论沉思录
  • zhaozhn5
  • zhaozhn5
  • 2017年09月09日 21:09
  • 316

概率论沉思录 前言

    1998年4月30日Jaynes去世。此前,他曾经要我完成并出版他的这本关于概率论的书。为此,我曾纠结了一段时间。因为我认为Jaynes毫无疑问想完成这本书;但不幸的是,这本书后面的许多章节(...
  • shoreman
  • shoreman
  • 2011年04月17日 22:22
  • 2030

《C++沉思录》第五章---代理类

          在编程过程中可能要把不同的对象(这些对象可能存在一些关系:继承)放到一个容器里边,我们都知道一个基类的指针可以指向子类的一个实例,我们就在这里有用一个基类的指针使其指向不同的实例,...
  • wei801004
  • wei801004
  • 2006年06月08日 14:52
  • 1414

<<C++ 沉思录>> 中文人民邮电出版 勘误

> 中文人民邮电出版 勘误 这本中文版里面有各种坑爹的小错误. 比方说变量名的大小写, 同一个变量, 出现了大小写不一致, 等等问题都有. 然后今天感觉遇到了个语法问题. 关于继承权限的问题....
  • u011368821
  • u011368821
  • 2015年05月22日 15:33
  • 994

那些年,我们读过的C、C++经典

那些年,我们捧读过的C和C++经典 导读: 从2008年开始,人民邮电出版社出版了一系列国外的C/C++经典图书,包括《C和指针》《C专家编程》《C陷阱与缺陷》《C++沉思录》等,由于图书本身的知...
  • xiaohuihui_fly1
  • xiaohuihui_fly1
  • 2012年07月09日 23:09
  • 1016

C++沉思录读书笔记(30章)- 一个IO库的两种设计

假设需要对自定义的String类进行各种类型的IO 设计一,使用继承进行抽象,代码如下 class Write { public: virtual ~Write(); virtual vo...
  • yucan1001
  • yucan1001
  • 2011年11月11日 11:30
  • 647

《软件开发沉思录》读书笔记

1、  业务软件的最后一英里 l  何为最后一英里问题:简单-复杂-不堪重负-采用新系统来替换?风险?(替换的风险,不替换的风险,二难境地) l  敏捷思潮的一大贡献,是对于软件开发作为社会行为的...
  • zhang_qxian
  • zhang_qxian
  • 2017年01月04日 08:55
  • 300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《C++沉思录》将计数器和对象分离开
举报原因:
原因补充:

(最多只允许输入30个字)