W
wo3kie
#include <iostream>
#include <map>
#include <utility>
//
// Base
// / | \
// Derived1 Derived2 \
// \ | /
// Derived3
//
template< typename _T >
struct Base {
friend void * operator new ( size_t _size ){
std::cout << typeid( _T ).name() << std::endl;
return malloc( _size );
}
};
struct Derived1 : Base< Derived1 > {
};
struct Derived2 : Base< Derived2 >{
};
struct Derived3 : Derived1, Derived2, Base< Derived3 >{
};
int main(){
Derived1 * d1 = new Derived1; // prints 8Derived3
Derived2 * d2 = new Derived2; // prints 8Derived3
}
#include <map>
#include <utility>
//
// Base
// / | \
// Derived1 Derived2 \
// \ | /
// Derived3
//
template< typename _T >
struct Base {
friend void * operator new ( size_t _size ){
std::cout << typeid( _T ).name() << std::endl;
return malloc( _size );
}
};
struct Derived1 : Base< Derived1 > {
};
struct Derived2 : Base< Derived2 >{
};
struct Derived3 : Derived1, Derived2, Base< Derived3 >{
};
int main(){
Derived1 * d1 = new Derived1; // prints 8Derived3
Derived2 * d2 = new Derived2; // prints 8Derived3
}