• 2.2.2、为单个的类重载 new[]和 delete[]

    必须小心对象数组的分配。你可能希望调用到被你重载过的 new 和 delete 操
    作符,但并不如此。内存的请求被定向到全局的 new[]和 delete[] 操作符,而这
    些内存来自于系统堆。

    C++将对象数组的内存分配作为一个单独的操作,而不同于单个对象的内存分配。
    为了改变这种方式,你同样需要重载 new[] 和 delete[]操作符。

    class TestClass{
        public:
        void* operator new[](size_t size);
        void operator delete[](void*p);// .. other members here ..};
    void*TestClass::operatornew[](size_t size){
        void *p =malloc(size);
    return(p);
    }
    void TestClass::operator delete[](void*p){
        free(p);
        }
    int main(void){
        TestClass *p =new TestClass[10];// ... etc ...
        delete[] p;
    }
    

    但是注意:对于多数 C++的实现,new[]操作符中的个数参数是数组的大小加上
    额外的存储对象数目的一些字节。在你的内存分配机制重要考虑的这一点。你应
    该尽量避免分配对象数组,从而使你的内存分配策略简单。

    上一篇:
    ViewModel
    下一篇:
    NDK相关(5)
    本文目录
    本文目录