template <class T>
class MANGOS_DLL_DECL LocalStaticCreation
{
union MaxAlign
{
char t_[sizeof(T)];
short int shortInt_;
int int_;
long int longInt_;
float float_;
double double_;
long double longDouble_;
struct Test;
int Test::* pMember_;
int (Test::*pMemberFn_)(int);
};
public:
static T* Create(void)
{
static MaxAlign si_localStatic;//得到一个内存分配
return new(&si_localStatic) T;//没有申请内存的,只是调用了构造函数,返回一个指向已经分配好的内存的一个指针,效率比new要高
}
static void Destroy(T *obj) { obj->~T(); }//只是销毁对象,没有释放内存
};
一直对return new(&si_localStaic) T;这句话迷惑,现在解答如下:
1、new、operater new、replace new的区别
replace new的原型如下:
void* operater new(size_t size,void* p)
new是在堆栈上分配内存,要搜索内存消耗时间,还可能因内存不够失败。
replace new在指定的内存区域构建对象,销毁时调用析构函数,内存不返回系统,留给其他对象使用,节省内存分配时间。