如何在C ++中之前找出从一个类创建了多少个对象?
答案 0 :(得分:2)
使用此基类:
template<class T>
class Counter
{
public:
Counter()
{
++count;
}
Counter(const Counter&)
{
++count;
}
static size_t GetCount()
{
return count;
}
private:
static size_t count;
};
template<class T>
size_t Counter<T>::count = 0;
继承它并将您的类类型作为模板参数传递。这是为每个类类型获得一个唯一的计数。
class MyClass : public Counter<MyClass>
{
};
现在你可以计算你的类的构造次数,而不必修改它自己的构造函数或者可能忘记增加其中一个的计数。
不要通过指向Counter
的指针删除,因为它缺少虚拟析构函数。
答案 1 :(得分:1)
您可以添加static int instanceCount;
成员变量,并在每个类构造函数中递增它:
class MyClass {
static int instanceCount = 0;
public:
MyClass() {
++instanceCount;
}
MyClass(const MyClass& rhs) {
++instanceCount;
// Do copy code ...
}
static int getCreated() { return instanceCount; }
};
答案 2 :(得分:0)
你只需定义静态整数值并将其放在构造函数中,如变量++
f = open('sampleText.txt', 'w', 0)
答案 3 :(得分:0)
我宁愿在维基页面上复制一个例子,专门介绍一个众所周知的成语CRTP。
在午夜我能为自己写的任何内容都要完整得多。此外,我发现所有其他回复确实错过了一些东西,这就是为什么我再添加一个回复列表的原因。
template <typename T> struct counter {
static int objects_created;
static int objects_alive;
counter() {
++objects_created;
++objects_alive;
}
counter(const counter&) {
++objects_created;
++objects_alive;
}
protected:
~counter() {
--objects_alive;
}
};
template <typename T> int counter<T>::objects_created( 0 );
template <typename T> int counter<T>::objects_alive( 0 );
class X : counter<X> { // ... };
class Y : counter<Y> { // ... };
我想这是一个完整的,既有创建对象的计数器,也有活着的对象。
Here原始链接。