在更有效的 C++ 中,迈耶斯描述了一种使用对象计数基类(第 26 项)来计算对象实例化的方法。是否可以使用如下组合技术来实现相同的功能。使用私有继承是否有特定的优势,在这种情况下使用组合有什么缺点。
ps:- 我已经重用了来自更有效的 C++ 的代码,并进行了少量修改。
#ifndef COUNTERTEMPLATE_HPP_
#define COUNTERTEMPLATE_HPP_
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
template <class BeingCounted>
class Counted {
public:
static int ObjectCount(){return numOfObjects;}
Counted();
Counted(const Counted& rhs);
~Counted(){--numOfObjects;}
protected:
private:
static int numOfObjects;
static int maxNumOfObjects;
void init();
};
template<class BeingCounted> Counted<BeingCounted>::Counted()
{
init();
}
template<class BeingCounted> Counted<BeingCounted>::Counted(const Counted& rhs)
{
init();
}
template<class BeingCounted> void Counted<BeingCounted>::init()
{
if(numOfObjects>maxNumOfObjects){}
++numOfObjects;
}
class Printer
{
public:
static Printer* makePrinter(){return new Printer;};
static Printer* makePrinter(const Printer& rhs);
Counted<Printer>& getCounterObject(){return counterObject;}
~Printer();
private:
Printer(){};
Counted<Printer> counterObject;
Printer(const Printer& rhs){};
};
#endif /* COUNTERTEMPLATE_HPP_ */