我正在使用Poco,并且正在创建TCP服务器参数,如下所示: Poco :: Net :: TCPServerParams * pParams =新的Poco :: Net :: TCPServerParams();
当我使用Valgring时,会出现明确的内存泄漏: 1271 == 00:00:01:37.131 48682 ==在0x4C2903F:运算符new(unsigned long)(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中 )
在线:Poco :: Net :: TCPServerParams * pParams =新的Poco :: Net :: TCPServerParams();
Poco版本: dpkg -l | grep poco ii libpoco-dev 1.6.1-AVA3 amd64 C ++便携式组件(POCO)开发文件 ii libpoconet31 1.6.1-AVA3 amd64 C ++便携式组件(POCO)网络库
要修复此问题,我在指针上使用了delete,但出现错误
delete pParams
'TCPServerParams.h:98:10:错误:“虚拟Poco :: Net :: TCPServerParams :: ~~ TCPServerParams()'受保护'
答案 0 :(得分:0)
使用TCPServerParams
的常见方法是与TCPServer
一起使用。首先,您用TCPServerParams
创建new
,然后将其传递到TCPServer
中,该参数拥有参数的所有权。在reference of TCPServer中有描述。
服务器还拥有TCPServerParams对象的所有权。
因此TCPServer
删除不需要的参数实例。
您无法通过TCPServerParams
手动删除delete
,因为析构函数受到保护。
在Poco库中,许多类都有受保护的析构函数,它迫使您使用Poco::AutoPtr
类来管理实例的生存期。
TCPServerParams
源自RefCountedObject
。 RefCountedObject
提供了参考计数器机制。它具有release
方法,可在AutoPtr
的生存期结束时删除对象。
所以你可以这样写:
Poco::AutoPtr<Poco::Net::TCPServerParams> p(new Poco::Net::TCPServerParams());
AutoPtr
自动释放内存。