勤能补拙,厚积薄发

合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下
随笔 - 19, 文章 - 0, 评论 - 3, 引用 - 0
数据加载中……

More Effective C++(item27)

request the object generated from heap
 1#include <iostream>
 2#include <list>
 3#include <algorithm>
 4
 5typedef const void* RawAddress;
 6class HeapTracked {
 7    public:
 8        class MissingAddress{};
 9        virtual ~HeapTracked() = 0;
10        static void *operator new(size_t size);
11        static void operator delete(void *ptr);
12        bool isOnHeap() const;
13    private:
14        static std::list<RawAddress> addresses;
15}
;
16
17std::list<RawAddress> HeapTracked::addresses;
18
19HeapTracked::~HeapTracked(){}
20
21void* HeapTracked::operator new(size_t size)
22{
23    void *memPtr = ::operator new(size);
24    addresses.push_front(memPtr);
25    return memPtr;
26}

27
28void HeapTracked::operator delete(void *ptr)
29{
30    std::list<RawAddress>::iterator it = find(addresses.begin(), 
31           addresses.end(), ptr);
32    if (it != addresses.end()) {
33        addresses.erase(it);
34        ::operator delete(ptr);
35    }
 else {
36        throw MissingAddress();
37    }

38}

39
40bool HeapTracked::isOnHeap() const
41{
42    const void *rawAddress = dynamic_cast<const void*>(this);
43    std::list<RawAddress>::iterator it = 
44        find(addresses.begin(), addresses.end(), rawAddress);
45    return it != addresses.end();
46}

47

posted on 2011-12-14 10:58 lee007 阅读(444) 评论(0)  编辑 收藏 引用 所属分类: Programming Study


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