原文出自: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。