class A(E *pE)
{
    //对*pE操作
}class C(E *pE)
{
    //对*pE操作
}class E
{
    //
}主程序:操作如下
E *pE1,*pE2;
A *pA1(pE1),*pA2(pE2);
C *pC1(pE1),*pC2(pE2);这样做会不会出错?
要求:
类C和类A都会对E进行操作
如果出现同时操作呢?会不会有问题?怎么样避免这种问题?

解决方案 »

  1.   

    不知道你上面的
    A *pA1(pE1),*pA2(pE2);
    C *pC1(pE1),*pC2(pE2); 是函数声明?还是?你用的是指针引用阿,你可以声明对象后对其操作,操作肯定有个顺序的,一般不会出问题,除非涉及到线程或者全局静态E类的对象。一般不会出问题了。
      

  2.   

    Lock,Unlock处理不会做。55555555
      

  3.   

    如果是单线程的话,不会出问题。如果是多线程,在E内部做同步处理。同步处理用 LPCRITICAL_SECTION 
      

  4.   

    定义一个 CRITICAL_SECTION 变量,并用 InitializeCriticalSection 初始化
      CRITICAL_SECTION  cs ; 
      InitializeCriticalSection(&cs) ; 
       调用下面两个函数加锁和解锁EnterCriticalSection(&cs) ; // 加锁LeaveCriticalSection(&cs) ; // 解锁最后用 DeleteCriticalSection(&cs); // 很简单的,上网搜搜吧
      

  5.   

    E *pE1,*pE2;这句话有错, 类的指针必须初始化!
    这样很危险!
    可以这样 E e1;
    E* pE1 = &e1;
    ....... 
      

  6.   

    E *pE1,*pE2;这句话有错, 类的指针必须初始化!(产生野指针)
    这样很危险!
    可以这样 E e1;
    E* pE1 = &e1;
    ....... 
    --------------
    的确这样做是有很打危险。
    -----------
    现得出结论:
    方法一:
       1.1 主窗体.h文件中声明: E *pE1;
       1.2 主窗体的构造函数 : pE1 = new E(参数);
    这样做的好处,对象pE1在主窗体内部都可以使用。
    不足之处,只能是指针对象
    -----------
    方法二:
       2.1 在主窗体的某个程序内处理
       2.2      E e1;
                E *pE = &e1;
    这样做必须E内部必须有一个空的构造函数
       2.3      E *pE = new E(参数); 
         
       或者     E *pE = NULL;
                pE = new E(参数);