博文
怎样在 C++ 中计算对象的实例化次数(2005-11-16 13:38:00)
摘要:
Objects Counting in C++
在 C++ 中,对某个 class 所产生出来的 objects保持正确的计数,是办得到的,除非你面对一些疯狂份子。
译文保留原作时态,并未修改。以下是译文所采用的几个特别请读者注意的术语:
client :客端。
type:型别。为避免和其他近似术语混淆,本文译为「型别」而非「类型」。
instantiated:具现化。「针对一个 template,具体实现出一份实体」的意思。
instance:实体。「案例」是绝对错误的译法。
parameter:叁数。或称型式叁数,形叁。
argument:引数。或称实质叁数,实叁。
至於 class, object, data member, member function, constructor, destructor, template 等术语,皆保留不译。
有时候,容易的事情虽然容易,但它们还是隐藏着某种微妙。举个例子,假设你有个 class名为 Widget,你希望有某种办法找出程式执行期间究竟存在着多少个 Widget objects。方法之一(不但容易实作而且答案正确)就是为 Widget 准备一个 static 计数器,每当Widget constructor 被呼叫,就将该计数器加一,每当Widget destructor 被呼叫,就将该计数器减一。此外你还需要一个 static 成员函式 howMany( ),用来回报目前存在多少个 Widget objects。如果 Widget 什麽都没做,单单只是追踪其objects个数,那麽它看起来大约像这样:
class Widget {
public:
Widget() { ++count; }
&n......