#include #include #include using namespace hgl; template class TestArray { TCB *life_cb; T *items; int count; int alloc_count; private: void Realloc(int new_count) { if(new_count *cb) { life_cb=cb; items=nullptr; count=0; } ~TestArray() { if(items)free(items); } T *Create() { int off=count; ++count; Realloc(count); T *p=items+off; life_cb->Create(p); return p; } void Add(T *data,const int num) { int off=count; count+=num; Realloc(count); life_cb->Copy(items+off,data,num); } void Add(T data) { Add(&data,1); } }; template class TestRawArray:public TestArray> { RawLifetimeCallback life_cb; public: TestRawArray():TestArray>(&life_cb){} ~TestRawArray()=default; }; template class TestObject { int value; public: TestObject(){value=0;} ~TestObject() { std::cout<<"~TestObject("< class TestObjectArray:public Test> { DefaultObjectLifetimeCallback life_cb;; public: TestObjectArray():TestArray>(&life_cb){} ~TestObjectArray()=default; }; void main() { //原生类型测试 { TestRawArray ta_int; ta_int.Add(1); ta_int.Add(2); ta_int.Add(3); *(ta_int.Create())=4; int two[2]={9,0}; ta_int.Add(two,2); std::cout<<"TestArray: "; for(const int val:ta_int) std::cout< ta_ds; DataStruct ds{1,2}; ta_ds.Add(ds); DataStruct *p=ta_ds.Create(); *p={3,4}; DataStruct ds2[2]{{5,6},{7,8}}; ta_ds.Add(ds2,2); std::cout<<"TestArray>: "; for(const DataStruct &ds:ta_ds) std::cout<<"{"<> ta_obj; ta_obj.Add(); ta_obj.Add(); ta_obj.Add(); std::cout<<"TestArray>: "; for(const TestObject &obj:ta_obj) std::cout<<"{"<