关于CArray

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
  }

 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值