很久没有用心的读过一本书了,今天静下心来,认真的看了过去一直在看的云风的书(游戏之旅-我的编程感悟)。这本书从两个月前都开始看,吊吊当当的持续到现在,很多章节浅尝辄止。说实话,有些章节是真心看不懂。看看大牛们的书,自己真是羞愧难当。没办法,既然难以望其项背,自己唯而加快奔跑。今天仔细阅读了C++的一章,受益不少,谨以此记录以备忘。
class monitor { void call() {} void return() {} }
template <typename T> class WrapFunction { private: WrapFunction(); WrapFunction(const WrapFunction&); WrapFunction& operator=(const WrapFunction&); T* m_pT; private: class CallHelper { private: T* m_pT; CallHelper(T* p): m_pT(p){} public: ~CallHelper(){ m_pT->after(); } T* operator->()const { return m_pT; } friend class WrapFunction<T>; }; public: WrapFunction(T& obj): m_pT(&obj){} CallHelper operator->() const { m_pT->before(); return CallHelper(m_pT); } };
Test obj; WrapFunction<Test> t(obj); t->print();
有几个技术都是为了使外部类WrapFunction的方法尽量私有化,仅仅公开两个方法。一个构造函数,一个重载。默认构造和copy,赋值通通禁止调用。
通过添加max变量来跟踪对象创建的最大个数。
class counter_data { public: counter_data(const char* name) :_name(name){ printf("name:%s this:%p\n", name, this); } ~counter_data(){ printf("name:%s this:%p count:%d\n", _name, this, current_count()); } void inc() { if(++_counter > _max){ _max = _counter; } } void dec() { --_counter; assert(_counter >= 0); } int current_count() const{ return _counter; } int max_count() const{ return _max; } private: int _max; int _counter; const char* _name; }; template <typename T> class counter { public: counter() {_data.inc();} counter(const counter& rhs){ _data.inc(); } ~counter(){ _data.dec(); } public: int current_count()const { return _data.current_count(); } int max_count() const{ return _data.max_count(); } private: static counter_data _data; }; template<typename T> counter_data counter<T>::_data(typeid(T).name());
class Object { public: ~Object(){ printf("Object count:%d\n", _couter.current_count()); } private: counter<Object> _couter; };