CArray在afxtemp.h中定义和实现。
CArray比较重要的一个函数是SetSize。
CArray维护的数据有:数组的起始地址(TYPE*)、数组已存入的元素的个数、数组能容纳的元素的个数、数组增长的步长(当数组存满元素时需要开辟新的空间,空间的大小受步长的影响,这个参数比较重要)。
CArray存入的是对象的拷贝,不应该存放指针。
test code here vc++8.0
class BlueskyBlock
{
public:
BlueskyBlock( ) : m_data(0)
{
}
BlueskyBlock( int nData ) : m_data(nData)
{
}
~BlueskyBlock( )
{
m_data = 0;
}
int GetData( )
{
return m_data;
}
protected:
private:
int m_data;
};
///使用片断1 CArray存放对象的拷贝
CArray<BlueskyBlock, BlueskyBlock> test_array;
BlueskyBlock one_bluesky(1), two(2), three(3);
test_array.Add( one_bluesky );
test_array.Add( two);
test_array.Add( three );
CArray<BlueskyBlock, BlueskyBlock> test_array2;
test_array2.Copy( test_array ); // CObject不提供operator=和拷贝函数的实现
test_array2.Append( test_array ); // 追加一个数组的内容
for ( int nPos = 0; nPos < test_array2.GetSize(); nPos ++ )
{
cout << test_array2.GetAt(nPos).GetData() << endl;
}
///使用片断2 CArray不应该存放指针
{
CArray< BlueskyBlock*, BlueskyBlock* > test_array;
// 不应该这样用!这样在test_array销毁时并不会把这两个堆对象释放掉
// 如果要存指针,可以用CPtrArray
test_array.Add( new BlueskyBlock(1) );
test_array.Add( new BlueskyBlock(2) );
for ( int nPos = 0; nPos < test_array.GetSize(); nPos ++ )
{
cout << test_array.GetAt(nPos)->GetData() << endl; // output ok
}
}