AnsiString研究(AnsiString内的引用计数器),该怎么解决

AnsiString研究(AnsiString内的引用计数器)
VCL的AnsiString看似简单实际远比CString复杂。
AnsiString实际可分解为以下结构:
struct   StrData
{
      int   Ref;   //引用计数
      int   Size;//数据大小
      char   Data[];//实际的数据   是按4字节对齐的
};
struct   AnsiString
{
      StrData   *PData;//数据指针
};

对于   AnsiString   Str;
一销毁:delete   Str   或   Str   =   " ";或Str.Length();
if(PData)
{
        if(--PData-> Ref==0)
        {
              delete[]   (int)PData;
        }
        PData   =   NULL;      
}
二赋值   "12345678 ":
    if(PData==NULL)
    {
          PData   =   new   int[sizeof(StrData)+(Size+1+3)/4];//+1是补 '\0 ',+3是对齐4字节
          PData-> Ref   =   1;
          PData-> Size   =   Size;
          CopyMemory(PData-> Data,Buf,Size+1);];//+1是补 '\0 '
    }
    else
    {
          if(PData-> Ref==1)
          {
                  销毁并重建PData
          }
          else
          {
                  PData-> Ref--;
                  //重新构造PData
                  PData   =   new   int[sizeof(StrData)+(Size+1+3)/4];
                  PData-> Ref   =   1;
                  PData-> Size   =   Size;
                  CopyMemory(PData-> Data,Buf,Size+1);];//+1是补 '\0 '
          }
    }
三赋值AnsiString:
    if(PData==NULL)
    {
          PData   =   new   int[sizeof(StrData)+(Size+1+3)/4];//+1是补 '\0 '+3是对齐4字节
          PData-> Ref   =   1;
          PData-> Size   =   Size;
          CopyMemory(PData-> Data,Buf,Size+1);];//+1是补 '\0 '
    }
    else
    {
          PData-> Ref++;
    }
四修改:if(PData-> Ref> 1)
            {
                  PData-> Ref--;
                  PData   =   重建
                  ...
            }
            else
            {
                ...
            }

------解决方案--------------------