C++ 无法使用Poco TCPServer和TCPServerConnectionFactory
我正在活动中使用TCPServer。 为了简化我的设计,我将我的活动从TCPServerConnectionFactory中删除。 这样,我的活动就实现了CreateConnection方法 要创建我创建的TCPServer,请执行以下操作: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:
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);