类对象引用计数使用模板实现(奇特的递归模板模式)
来源:互联网 发布:淘宝投诉制作原图 编辑:程序博客网 时间:2024/04/28 17:03
有时候我们需要跟踪一个类的对象个数,又不想为每一个类去实现引用计数,我们可以使用继承思维去实现这一目标。
#include "stdafx.h"#include <iostream>using namespace std; class Counted {private:static int count;public:Counted(){++count;}Counted(const Counted&){++count;}~Counted(){--count;}static int getCount(){return count;}};int Counted::count = 0;class CountedClass :public Counted{};class CountedClass2 :public Counted{};int main() {//Koenig::KoenigArg karg(10);//cout << karg;CountedClass a;cout << CountedClass::getCount() << endl;CountedClass b;cout << CountedClass::getCount() << endl;CountedClass2 c;cout << CountedClass2::getCount() << endl;return 0;}
但是结果却是错误的
派生自counted的类共享了相同的、唯一的静态数据成员。
那么解决这个问题的办法是使用模板:
#include <iostream>using namespace std;template<class T>class Counted {private:static int count;public:Counted(){++count;}Counted(const Counted<T>&){++count;}~Counted(){--count;}static int getCount(){return count;}};template<class T>int Counted<T>::count = 0;class CountedClass :public Counted<CountedClass>{};class CountedClass2 :public Counted<CountedClass2>{};int main() {//Koenig::KoenigArg karg(10);//cout << karg;CountedClass a;cout << CountedClass::getCount() << endl;CountedClass b;cout << CountedClass::getCount() << endl;CountedClass2 c;cout << CountedClass2::getCount() << endl;return 0;}
这也就是模板的奇特递归模式吧
0 0
- 类对象引用计数使用模板实现(奇特的递归模板模式)
- 奇特递归模板模式
- C++惯用法:奇特的递归模板模式
- templates — C++模板的应用<奇特的递归模板模式>
- templates — C++模板的应用<奇特的递归模板模式>
- C++惯用法:奇特的递归模板模式(Curiously Recurring Template Pattern,CRTP,Mixin-from-above)
- C++惯用法:奇特的递归模板模式(Curiously Recurring Template Pattern,CRTP,Mixin-from-above)
- C++惯用法:奇特的递归模板模式(Curiously Recurring Template Pattern,CRTP,Mixin-from-above)
- C++惯用法:奇特的递归模板模式(Curiously Recurring Template Pattern,CRTP,Mixin-from-above)
- 带引用计数的智能指针(模板类)实现的3种方法
- 计数模式 (模板)
- C++ 引用计数类模板
- 递归模板模式的使用: 统计某类对象的个数
- c++引用计数外置方式模板实现
- 支持引用计数的智能指针类模板
- Java类扫描器的实现(使用模板Template模式)
- 一个用模板实现的计数基类
- 递归模板实现单例模式
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- no column name was specified for column
- 天梯赛 大区赛 L3-014.周游世界 (Dijkstra)
- 使用国内镜像源加速pip安装
- 云服务器ECS和云虚拟主机VPS的区别
- 类对象引用计数使用模板实现(奇特的递归模板模式)
- html+css+jquery实现右下角返回顶部功能
- 傅里叶变换
- EASY——Two Sum
- python groupby用法实战
- 编写可维护代码的中间件模式
- JVM详解-从入门到深入了解
- Android Matrix变换
- [GDKOI2014][JZOJ3572]基因模式