我想编写一个服务器端程序,可以接收多个客户端的连接并与其通信。在服务器端程序中定义了两个继承自CAsnycSocket的类,CListenSocket和CCommunicationSocket,分别用来监听连接和连接后与客户通信。在网上看到有人建议把CListenSocket的OnAccept写成如下形式:void CListenSocket::OnAccept(int nErrorCode)
{
// 生成新的通信Socket对象与客户进行通信
CCommunicationSocket* pCommuSocket = new CCommunicationSocket();
Accept(*pCommuSocket); CAsyncSocket::OnAccept(nErrorCode);
}然后在CCommunicationSocket类的OnReceive函数里就可以与客户端通信了。采用这种方法确实能完成所需的功能了,但是每次有新客户端请求的时候都会生成一个CCommunicationSocket对象,时间长了不就发生内存泄漏了嘛,新生成的这些对象如何才能析构掉呢?

解决方案 »

  1.   

    连接断开之后
    delete pCommuSocket;
      

  2.   


    如何判断已经断开连接了?是在CCommunicationSocket类的OnClose函数里调用delete pCommuSocket吗?
      

  3.   

    在CCommunicationSocket的析构函数中delete this
      

  4.   

    CCommunicationSocket进行服务 可以执行完所需代码之后主动close 或者客户端close 这样就会自动执行到CCommunicationSocket的OnClose()函数里了,然后你可以在OnClose里调析构函数。
      

  5.   

    额 上面说错了。不是在析构函数中delete this...是在OnClose里delete this...
      

  6.   

    在delete this的时候 就会调用析构函数。