Smart Pointer

  1. #include <iostream>
  2. using namespace std;
  3. class Object{
  4.  string name,value;
  5. public:
  6.  void getName(){cout<<name<<endl;}
  7.  void getValue(){cout<<value<<endl;}
  8. };
  9. class Container{
  10.  vector vec;
  11. public:
  12.  void add(Object* obj){
  13.   vec.push_back(obj);
  14.  }
  15.  friend class SmartPointer;
  16. };
  17. class SmartPointer{
  18.  Container& container;
  19.  int index;
  20. public:
  21.  SmartPointer(Container& c):container(c),index(0){}
  22. bool operator++(){
  23.   if(index>=container.vec.size())
  24.    return false;
  25.   if(container.vec[++index]==NULL)
  26.    return false;
  27.   return true;
  28.  }
  29. bool operator++(int){
  30.   return operator++();
  31.  }
  32.  Object* operator->() const{
  33.   assert(container.vec[index]!=NULL);
  34.   return container.vec[index];
  35.  }
  36. };
  37. void test(){
  38.  Object o[10];
  39.  Container oc;
  40.  for(int i=0;i<10;i++){
  41.   oc.add(&o[i]);
  42.  }
  43.  SmartPointer sp(oc);
  44.  do{
  45.   sp->getName();
  46.   sp->getValue();
  47.  }while(sp++);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值