mangos的LocalStaticCreation类



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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值