#include <iostream>
#include <typeinfo>
using namespace std;
class Base
{
public:
Base():a(0){};
~Base(){};
void func(){}
int a;
};
class Derived : public Base{
public:
Derived(){ cout << "Constructing Derived Object." << endl; }
virtual void func(){
cout << "in virtual func" << endl;
}
static void * operator new(size_t s, void* p){
cout << "Placement new in Derived" << endl;
return ::operator new(s, p); // call global placement new, 存在默认的全局 placement new
}
};
int main()
{
Derived d;
Base b;
void * p = ::operator new(sizeof(Derived));
new(p) Derived(); // call Derived's placement new,成功识别类自定义的placement new
Derived *pd = static_cast<Derived *>(p);
cout << sizeof(b) << endl << sizeof(d) << endl;
pd->func();
return 0;
}
输出
Constructing Derived Object.
Placement new in Derived
Constructing Derived Object.
4
8
in virtual func