C++ 无法使用Poco TCPServer和TCPServerConnectionFactory

C++ 无法使用Poco TCPServer和TCPServerConnectionFactory,c++,shared-ptr,poco-libraries,C++,Shared Ptr,Poco Libraries,我正在活动中使用TCPServer。 为了简化我的设计,我将我的活动从TCPServerConnectionFactory中删除。 这样,我的活动就实现了CreateConnection方法 要创建我创建的TCPServer,请执行以下操作: Poco::Net::TCPServer(this, serverSocket); 不幸的是,当我的TCPServer被销毁时,它也会销毁我在参数中给出的这个。这就是我的活动,真的很烦人 深入查看Poco代码,我看到TCPServer创建了一个Poco:

我正在活动中使用TCPServer。 为了简化我的设计,我将我的活动从TCPServerConnectionFactory中删除。 这样,我的活动就实现了CreateConnection方法

要创建我创建的TCPServer,请执行以下操作:

Poco::Net::TCPServer(this, serverSocket);
不幸的是,当我的TCPServer被销毁时,它也会销毁我在参数中给出的这个。这就是我的活动,真的很烦人

深入查看Poco代码,我看到TCPServer创建了一个Poco::shared_Ptr,当这个shared_Ptr被销毁时,它会删除shared_Ptr的内容


如何将其传递给TCPServer而不在TCPServer生命周期结束时被销毁

必须将堆上分配的连接工厂传递给TCPServer。有关示例,请参见示例:


是的,我知道我可以用一个新的TSC来实现这一点,但我想给出一个持久对象,它不会在TCPServer生命周期结束时自动销毁。您可以保留共享指针,这样它就不会在TCPServer中销毁,因为您将拥有最后一个引用计数。我已经更新了上面答案中的代码。好的,我可以这样做,但是有可能创建一个共享的ptr吗?TCPServerConnectionFactory::ptr是Poco::SharedPtr,请看是的,我知道,但是如果我想使用第一个想法,我会将它提供给TCP服务器,因为这是TCPServerConnectionFactory。如果我认为我做不到Poco::Net::TCPServerTCPServerConnectionFactory::PTR,serverSocket;
class TimeServerConnection: public TCPServerConnection
{
  //...
};

// ...

class TimeServerConnectionFactory: public TCPServerConnectionFactory
{
  // ...
  TCPServerConnection* createConnection(const StreamSocket& socket)
  {
    return new TimeServerConnection(socket, _format);
  }
  // ...
};

// set-up a server socket
ServerSocket svs(port);
// retain the handle to shared ptr for later use
TCPServerConnectionFactory::Ptr pTSCF = new TimeServerConnectionFactory(format);
// set-up a TCPServer instance
TCPServer srv(pTSCF, svs);