c++实例研究

从0开始

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  104 随笔 :: 0 文章 :: 20 评论 :: 0 Trackbacks
#include <cstdlib>
#include 
<iostream>
using namespace std;

class u_ptr
{
    friend 
class Foo1;
private:
    u_ptr(
int* pp):p(pp),usecount(1){cout<<"u_ptr construction\n";}
private:
    
int usecount;
    
int *p;
}
;

class Foo1
{
public:
    Foo1(
int* pp, int vv):p(new u_ptr(pp)),val(vv){cout<<"Foo construction\n";}
    
    Foo1(
const Foo1& other){ p = other.p; val=other.val; p->usecount++;cout<<"Foo1 copy"<<p->usecount<<"\n";}
    Foo1
& operator=(Foo1& rhs){ rhs.p->usecount++if(--(p->usecount)==0){cout<<"delete p"<<endl; delete p;} p = rhs.p; val=rhs.val;cout<<"Foo1 assign"<<p->usecount<<"\n"return *this;}
    
~Foo1()if(--(p->usecount)==0) delete p;cout<<"Foo1 destruction"<<p->usecount<<"\n";}
    
private:
    u_ptr 
*p;
    
int val;
}
;



int main()
{
    
int a=9,b=10;
    
int* p=&a;
    
int* pp=&b;
    Foo1 f(p,a);
    Foo1 f2(f);
    Foo1 f3(pp,b);
    f3
=f2;
    
return 0;
}


为了看清楚指针指向,改为public
#include <cstdlib>
#include 
<iostream>
using namespace std;

class u_ptr
{
    friend 
class Foo1;
private:
    u_ptr(
int* pp):p(pp),usecount(1){cout<<"u_ptr construction\n";}
public:
    
int usecount;
    
int *p;
}
;

class Foo1
{
public:
    Foo1(
int* pp, int vv):p(new u_ptr(pp)),val(vv){cout<<"Foo construction\n";}
    
    Foo1(
const Foo1& other){ p = other.p; val=other.val; p->usecount++;cout<<"Foo1 copy"<<p->usecount<<"\n";}
    Foo1
& operator=(Foo1& rhs){ rhs.p->usecount++if(--(p->usecount)==0){cout<<"delete p"<<endl; delete p;} p = rhs.p; val=rhs.val;cout<<"Foo1 assign"<<p->usecount<<"\n"return *this;}
    
~Foo1()if(--(p->usecount)==0) delete p;cout<<"Foo1 destruction"<<p->usecount<<"\n";}
    
    
void show(){cout<<*(p->p)<<' '<<val<<endl;}
public:
    u_ptr 
*p;
    
int val;
}
;



int main()
{
    
int a=9,b=10;
    
int* p=&a;
    
int* pp=&b;
    Foo1 f(p,a);
    Foo1 f2(f);
    Foo1 f3(pp,b);
    f3 
= f2;
    f.show();f2.show();f3.show();
    (
*f.p->p)++;
    f.show();f2.show();f3.show();
    
return 0;
}

posted on 2010-05-08 13:32 elprup 阅读(238) 评论(0)  编辑 收藏 引用 所属分类: c++实例

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理