struct CBase
{
    virtual int aa(){}=0;
}class CA : public CBase
{
    virtual int aa(){return 1;};
}dll导出函数 CBase* CreateCA(){return (CBase*)new CA};调用:CBase *aa = CreateCA();请问,这对象怎么删除,详细代码,谢谢

解决方案 »

  1.   

    一般来说内存在哪个模块分配的,就应在哪个模块释放。你可以在dll中增加一个导出函数eleaseDA(CBase* p){if(p)delete p;}还可以在dll内部保存new 出来的指针,然后在内部处理掉。
      

  2.   


    不需要这样子吗:eleaseDA(CBase* p){if(p)delete (CA*)p;}
    delete p 和 delete (CA*)p有没有区别,谢谢
      

  3.   


    这个要看你传进去的p是什么类型的,如果是CA*类型的当然需要delete(CA*)p转换一下了。
      

  4.   

    谁污染谁治理.
    DLL里new出的对象,要在DLL里提供相应的接口delete
      

  5.   

    建议把CBase的析构函数设为Virtual函数,这样直接delete aa应该就可以了。2楼的建议很好!!
      

  6.   


    提供一个Release接口.你看看COM都是这样做的.struct CBase 

        virtual int aa(){}=0; 
        virtual void Release()=0;
    } class CA : public CBase 

        virtual int aa(){return 1;}; 
        virtual void Release(){ delete this;}
    } //dll导出函数 CBase* CreateCA(){return (CBase*)new CA}; CBase* pInstance = CreateCA();
    pInstance->Release();