browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

一个适用于STL的指针容器类

Posted by on 2006 年 06 月 26 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

偶然间从ATL-style的template中获得灵感,有了下面这个适用于STL的指针容器类,主要目的是在删除元素的时候不必另行对指针元素进行delete。代码很简单,也就不多解释了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
template < typename T >
class LPtrContainer : public T
{
public:
    ~LPtrContainer( void )
    {
        erase( begin(), end() );
    }
    iterator erase( iterator it )
    {
        delete *it;
        *it = NULL;
        return T::erase( it );
    }
    iterator erase( iterator first, iterator last )
    {
        T::iterator it;
        for ( it = first; it != last; ++it )
        {
            delete *it;
            *it = NULL;
        }
        return T::erase( first, last );
    }
};

PS:我并不知道析构函数那样的做法是否恰当——至少对于VC6的STL ugly版我必须那么做。

订阅本站

一条评论

  • At 2008.08.08 09:34, pipilu said:

    很好,可惜不能很好的应用于泛型编程。
    至少在remove类的泛型算法中,还是会出现内存泄漏

    (Required)
    (Required, will not be published)