16:41 

Трюк 0x0000: Сколько объектов конкретного класса созданно.

Malinovski


Даже неопытный программист C++ знает, как отслеживать количество существующих объектов класса. Для этого необходимо добавить статическую переменную и немного изменить логику конструктора и диструктора:




#include <iostream>

using namespace std;

class CountedClass {
static int count;
public:
CountedClass () { ++count; }
CountedClass (const CountedClass&) { ++count; }
~CountedClass() { --count; }
static int getCount() { return count; }
};

int
CountedClass::count = 0;
int main (int argc, char * argv[]) {
CountedClass a;
cout << CountedClass::getCount() << endl; // 1
CountedClass b;
cout << CountedClass::getCount() << endl; // 2
{
CountedClass c(b);
cout << CountedClass::getCount() << endl; // 3
}
cout << CountedClass::getCount() << endl; // 2

return 0;
}



Все конструкторы увеличивают статическую переменную count, а деструкторы уменьшают её. Однако читать дальше


URL
Комментарии
2008-03-18 в 18:47 

Куб 0
я-то хотел от множественного наследования уйти.
а используя изложенный выше подход, при установке счетчика в уже существующую иерархию, имеем конструкции вида:
#include <string>
class CountedString: public std::string, public Counter {
public:
CountedString(): std::string() {
Install<CountedString>();
}
};

мне еще в детском саду прожужжали все уши про накладные расходы при использовании множественного наследования.
с точки зрения компактности вызова преимуществ не вижу. в моем случае надо помечать базовый класс, а в твоем случае делать наследование. так на так и выходит.

2008-03-19 в 09:47 

Malinovski
По первых мой подход позволяет работать в потоках!
Во вторых у тебя на в каждом конструкторе вызывается new и delete, а эти операции для операционной системы довольно-таки трудоёмкие и потребляют ресурсы, и чем сложнее иерархия классов тем больше накладных рассходов больше, в моём подходе такой болезни нет!
В третих, по поводу множественного наследования, готов выслушать твои шмелиные жжужания в мои уши, какие такие большие накладные расходы возникают при множественном наследовании в моём подходе.
И наконец, в четвёртых, я не ставил проблему побить компактность твоего подхода, хотя в логике моего подхода есть приимущество, т.к. у тебя надо указывать true для базового класса, и где-нить можно ошибившись случайно указать true, с моей точки зрения наследование более логично для указания базового класса.

URL
2008-03-19 в 15:49 

Куб 0
Сдаюсь перед опытностью старшего коллеги.
На тему с использованием наследования шаблона от обычного класса — мой копирайт)

   

Трюки программирования

главная