ACE提供了一种安全的包装类型ACE_Array<T>,能够在访问数组时进行检查,而且还提供了一些有用的特性,比如:复制和比较的语意;
例子代码:
int TestContainers::testACEArray(void)
{
ACE_DEBUG( (LM_INFO, ACE_TEXT("----------> use ACE_Array <----------\n")) );
int i = 0;
DataElement* elem = NULL;
DataElement** elem2 = NULL;
ACE_Array<DataElement*> arr(10);
for(i = 0; i < 10; i++)
{
elem = NULL;
ACE_NEW_RETURN(elem, DataElement(i), -1);
arr[i] = elem;
}
//Check the access
ACE_ASSERT(arr.set(elem, 11));
ACE_ASSERT(arr.get(elem, 11));
//Make a copy
ACE_Array<DataElement*> copy_arr = arr;
ACE_ASSERT(copy_arr == arr);
ACE_DEBUG( (LM_INFO, ACE_TEXT("----> outout with by array index ...\n")) );
for(i = 0; i < 10; i++)
{
ACE_DEBUG( (LM_INFO, ACE_TEXT(" %d"), arr[i]->getData()) );
}
ACE_DEBUG( (LM_INFO, ACE_TEXT("\n")) );
ACE_DEBUG( (LM_INFO, ACE_TEXT("----> outout with ITERATOR ...\n")) );
ACE_Array<DataElement*>::ITERATOR it(copy_arr);
while(!(it.done()))
{
elem2 = NULL;
elem = NULL;
it.next(elem2);
elem = *elem2;
if(elem)
{
ACE_DEBUG( (LM_INFO, ACE_TEXT(" %d\n"),elem->getData()) );
delete elem;
}
it.advance();
}
return 0;
}
(jacky) |