mangos的LocalStaticCreation类



    template 
        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在指定的内存区域构建对象,销毁时调用析构函数,内存不返回系统,留给其他对象使用,节省内存分配时间。



你可能感兴趣的:(C++)