原文出自:More Effective C++ 电子版 p.452
仅为个人学习,暴露缺点;所以仅供参考,欢迎讨论!
需求:当我需要实时了解当前有多少类型的对象同时存在。
设计:比如一开始会这样设计
class Widget {
public:
Widget() { ++count; }
Widget(const Widget&) { ++count; }
~Widget() { --count; }
static size_t howMany() { return count; }
private:
static size_t count;
};
直接在类中增加一个static member data。然后当Widget类型有对象被构造(复制构造)时计数器+1,析构时计数器-1;如果目标仅仅是针对Widget类的话,我们的需求已经被达到了。
但是,当我们需要统计不同类型的对象个数时,就需要换一种更为舒服的实现方式了。
设计一个计数类:
class Counter {
public:
Counter() { ++count; }
Counter(const Counter&) { ++count; }
~Counter() { --count; }
static size_t howMany()
{ return count; }
private:
static size_t count;
};
// 在需要计数的 class 中内嵌一个Counter object。
class Widget {
public:
..... // Widget 该有的所有public 成员,
// 都放在这里。
static size_t howMany()
{ return Counter::howMany(); }
private:
..... // Wi

本文探讨了在C++中如何统计不同类型对象的数量。通过设计一个Counter类,并利用模板技术,实现了针对不同类的计数功能,避免了静态成员变量count的冲突问题。通过内嵌Counter对象或让类继承Counter,可以方便地跟踪每个类实例的数量。
319

被折叠的 条评论
为什么被折叠?



