龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++设计模式之迭代器模式(4)

时间:2014-10-09 11:06来源:网络整理 作者:网络 点击:
分享到:
好了,这样的话,在客户端就不用去new JTListIterator了,只需要这样: 复制代码 代码如下: Iterator *pIterator = pJTList-GetIterator(); 这就完全好了;但是,这样又

好了,这样的话,在客户端就不用去new JTListIterator了,只需要这样:

复制代码 代码如下:

Iterator *pIterator = pJTList->GetIterator();

这就完全好了;但是,这样又出现另外一个问题,我在GetIterator中new了一个JTListIterator,对于客户端来说,我并不知道这个new操作的存在,就会出现客户端不会去释放这个new开辟的内存,那么如何实现这个内存的自动释放呢。好了,就结合迭代器模式,再将之前总结的RAII机制再实际运用一次。
根据RAII机制,需要将这个迭代器进行封装,让它具有自动释放的功能,就得借助另一个类,如下:

复制代码 代码如下:

class IteratorPtr
{
public:
     IteratorPtr(Iterator *pIterator) : m_pIterator(pIterator){}
     ~IteratorPtr() { delete m_pIterator; }
 
     Iterator *operator->(){ return m_pIterator; }
     Iterator &operator*() { return *m_pIterator; }
 
private:
     IteratorPtr(const IteratorPtr &);
     IteratorPtr &operator=(const IteratorPtr &);
     void *operator new(size_t size);
     void operator delete(void *);
 
private:
     Iterator *m_pIterator;
};

我们在使用的时候,就像下面这样:

复制代码 代码如下:

IteratorPtr pIterator(pJTList->GetIterator());

精彩图集

赞助商链接