template< class TYPE, class ARG_TYPE > class CArray : public CObject前一个是存储在数组中的对象的类型,后者是用来访问存储在数组中的对象的类型

解决方案 »

  1.   

    我知道这个意思,最想知道的是在add,remove时内存是怎样处理的,
    比如,Add CMyAry对象时,私有成员ary是如何拷贝的?
    我自己的对象(CMyAry)应该有哪些函数,才能够不导致内存问题。
      

  2.   

    add时,系统判断,已分配的内存是否够用,若不够,
    重新分配,(动态分配)
    remove时,不释放内存,
    当该对象生存期限达到时,释放内存.
      

  3.   

    ary里面存的是对象本身还是指针,取决于你的ary的定义方法。
    如果你这样定义CArray<CMyClass,CMyClass> ary;
    你就需要给CMyClass写一个拷贝构造函数,还要重载等于号 = 
    例: CMyClass & operator = (CMyClass &myclass)
        {
           .......
        }
        CMyClass (CMyClass &myclass)
       {
            ........
        }
    如果你这样定义CArray<CMyClass,CMyClass &> ary;
    你只需要给CMyClass写个重载等于号 = 的方法就可以了.
    如果你这样定义CArray<CMyClass*,CMyClass*> ary;
    你仍然需要给CMyClass类写一个重载等于号 = 的方法.
      

  4.   

    to programcat2001(边城) :
    有点明白了
    请问重载的等于号有什么用?
    即在什么时候重载会被调用?
    两种定义=的重载应该是不一样的吧?
    谢谢!
      

  5.   

    另外
    CArray<CMyClass,CMyClass&> ary1
    ...CArray<CMyClass,CMyClass&> ary2
    ary2=ary1以上做法可不可以?
      

  6.   

    重载等于号的原因:在CArray工作的过程中,MFC会调用一系列函数来完成CArray的功能,其中有一个函数是这样的:void CArray<TYPE, ARG_TYPE>::SetAtGrow(int nIndex, ARG_TYPE newElement)
    {
        ...
        m_pData[nIndex] = newElement; //由于这句代码原因,你的ARG_TYPE类必须有等号运算符重载的,也就是你的CMyClass类必须有等于号运算符重载,否则程序会出错的。
    }
      

  7.   

    CArray<CMyClass,CMyClass&> ary1
    ...CArray<CMyClass,CMyClass&> ary2
    ary2=ary1两上CArray对象之间能不能用等于号连接,要看CArray类是否重载了等于号,而不是看CMyClass是否重载了等于号。
      

  8.   

    为什么我没有重载等于号也可以用啊
    是不是
    class CMyClass
    {
    int 
    char
    ...
    }
    若成员都是简单类型就不用重载?
    另外拷贝构造函数和等于号分别在什么情况下起作用?
    比如CMyClass b=a;a是前面已定义的,此时起作用的是哪一个?
      

  9.   

    CArray类可不可以重载等号,我发现好像没有,那么可不可以派生,然后重载等号?该如何做?
      

  10.   

    to programcat2001(边城) 
    非常感谢你!
    明天结贴,好不好?
      

  11.   

    若成员都是简单类型就不用重载?
    另外拷贝构造函数和等于号分别在什么情况下起作用?
    比如CMyClass b=a;a是前面已定义的,此时起作用的是哪一个?1. 成员都是简单类型与是否重载等于号没有直接关系,该重载的时候一定重载.
    2. CMyClass b = a; 这时起作用的是CMyClass的重载等于号的方法.
    3. CArray类的两个对象能不能直接用等号连接,你可以试试,我没做过这样的实验,因为CArray类里没有重载等于号的方法,如果你从CArray派生一个子类然后在子类中重载等于号应该是可行的.如果你不愿意派生的话,你可以循环赋值来达到与重载等于号同样的要求.