⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p8018.c

📁 linux下编程用 编译软件
💻 C
字号:
// { dg-do run  }// prms-id: 8018class RefCount {private:  int nref;public:  RefCount() : nref(0) {}  ~RefCount() {}  int nrefs() const { return nref; }  int reference() {    nref++;    return nref;  }  int unreference() {    nref--;    return nref;  }};class A : public RefCount {public:  A() {}  ~A() {}};class RefA {private:  A *p;  void clear() {    if (p) {      p->unreference();      if (!p->nrefs())	delete p;    }  }public:  RefA(A* a) : p(a) { if (p) p->reference(); }  RefA(const RefA& a) : p(a.p) { if (p) p->reference(); }  ~RefA() { clear(); }  A* operator->() { return p; }  RefA& operator=(const RefA& a) {    clear();    p=a.p;    if (p)      p->reference();    return *this;  }  RefA& operator=(A* a) {    clear();    p=a;    if (p)      p->reference();    return *this;  }};class AccRefA {private:  RefA a;public:  AccRefA(A* ap) : a(ap) {}  AccRefA(const RefA& ar) : a(ar) {}  ~AccRefA() {}  operator RefA&() { return a; }  RefA& result() { return a; }};intmain() {  RefA a1 = new A;  AccRefA aa1(a1);  RefA a3 = aa1;  if (a1->nrefs() != 3)    return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -