#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Base {
public :
static vector< Base * > all_objects_of_this_class_or_subclasses;
static void print_summary_of_objects( int step) {
printf ( "В массиве указателей на шаге %d находится %d указателей\n " , step, all_objects_of_this_class_or_subclasses.size ( ) ) ;
}
Base( ) {
all_objects_of_this_class_or_subclasses.push_back ( this ) ;
}
~Base( ) {
auto it = find( all_objects_of_this_class_or_subclasses.begin ( ) , all_objects_of_this_class_or_subclasses.end ( ) , this ) ;
all_objects_of_this_class_or_subclasses.erase ( it) ;
}
} ;
vector< Base * > Base:: all_objects_of_this_class_or_subclasses ;
class Derived1 : public Base {
// ...
} ;
class Derived2 : public Base {
// ...
} ;
int main( ) {
Base:: print_summary_of_objects ( 0 ) ;
Base * base = new Base( ) ;
Base:: print_summary_of_objects ( 1 ) ;
Derived1 * derived1 = new Derived1( ) ;
Base:: print_summary_of_objects ( 2 ) ;
delete base;
Base:: print_summary_of_objects ( 3 ) ;
Derived2 * derived2 = new Derived2( ) ;
Base:: print_summary_of_objects ( 4 ) ;
delete derived2;
Base:: print_summary_of_objects ( 5 ) ;
delete derived1;
Base:: print_summary_of_objects ( 6 ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQmFzZSB7CnB1YmxpYzoKCXN0YXRpYyB2ZWN0b3I8QmFzZSAqPiBhbGxfb2JqZWN0c19vZl90aGlzX2NsYXNzX29yX3N1YmNsYXNzZXM7CgkKCXN0YXRpYyB2b2lkIHByaW50X3N1bW1hcnlfb2Zfb2JqZWN0cyhpbnQgc3RlcCkgewoJCXByaW50Zigi0JIg0LzQsNGB0YHQuNCy0LUg0YPQutCw0LfQsNGC0LXQu9C10Lkg0L3QsCDRiNCw0LPQtSAlZCDQvdCw0YXQvtC00LjRgtGB0Y8gJWQg0YPQutCw0LfQsNGC0LXQu9C10LlcbiIsIHN0ZXAsIGFsbF9vYmplY3RzX29mX3RoaXNfY2xhc3Nfb3Jfc3ViY2xhc3Nlcy5zaXplKCkpOwoJfQoJCiAgICBCYXNlKCkgewogICAgCWFsbF9vYmplY3RzX29mX3RoaXNfY2xhc3Nfb3Jfc3ViY2xhc3Nlcy5wdXNoX2JhY2sodGhpcyk7CiAgICB9CiAgICAKICAgIH5CYXNlKCkgewogICAgCWF1dG8gaXQgPSBmaW5kKGFsbF9vYmplY3RzX29mX3RoaXNfY2xhc3Nfb3Jfc3ViY2xhc3Nlcy5iZWdpbigpLCBhbGxfb2JqZWN0c19vZl90aGlzX2NsYXNzX29yX3N1YmNsYXNzZXMuZW5kKCksIHRoaXMpOwogICAgCWFsbF9vYmplY3RzX29mX3RoaXNfY2xhc3Nfb3Jfc3ViY2xhc3Nlcy5lcmFzZShpdCk7CiAgICB9Cn07Cgp2ZWN0b3I8QmFzZSAqPiBCYXNlOjphbGxfb2JqZWN0c19vZl90aGlzX2NsYXNzX29yX3N1YmNsYXNzZXM7CgpjbGFzcyBEZXJpdmVkMSA6IHB1YmxpYyBCYXNlIHsKICAgIC8vIC4uLgp9OwoKY2xhc3MgRGVyaXZlZDIgOiBwdWJsaWMgQmFzZSB7CiAgICAvLyAuLi4KfTsKCmludCBtYWluKCkgewoJQmFzZTo6cHJpbnRfc3VtbWFyeV9vZl9vYmplY3RzKDApOwoJCiAgICBCYXNlICpiYXNlID0gbmV3IEJhc2UoKTsKICAgIEJhc2U6OnByaW50X3N1bW1hcnlfb2Zfb2JqZWN0cygxKTsKCQogICAgRGVyaXZlZDEgKmRlcml2ZWQxID0gbmV3IERlcml2ZWQxKCk7CiAgICBCYXNlOjpwcmludF9zdW1tYXJ5X29mX29iamVjdHMoMik7CgkKICAgIGRlbGV0ZSBiYXNlOwogICAgQmFzZTo6cHJpbnRfc3VtbWFyeV9vZl9vYmplY3RzKDMpOwoJCiAgICBEZXJpdmVkMiAqZGVyaXZlZDIgPSBuZXcgRGVyaXZlZDIoKTsKICAgIEJhc2U6OnByaW50X3N1bW1hcnlfb2Zfb2JqZWN0cyg0KTsKCQogICAgZGVsZXRlIGRlcml2ZWQyOwogICAgQmFzZTo6cHJpbnRfc3VtbWFyeV9vZl9vYmplY3RzKDUpOwoJCiAgICBkZWxldGUgZGVyaXZlZDE7CiAgICBCYXNlOjpwcmludF9zdW1tYXJ5X29mX29iamVjdHMoNik7CiAgICByZXR1cm4gMDsKfQ==