如何修复 poco Poco::Net::TCPServerParams() valgrind 明确的泄漏

How to fix poco Poco::Net::TCPServerParams() valgrind definite leak

本文关键字:valgrind 泄漏 TCPServerParams poco 何修复 Poco Net      更新时间:2023-10-16

我正在使用Poco,我正在创建TCP服务器参数,如下所示: Poco::Net::TCPServerParams *pParams = new Poco::Net::TCPServerParams();

当我使用Valgring时,我得到了明确的内存泄漏: 1271 ==00:00:01:37.131 48682== 在 0x4C2903F: 运算符 new(无符号长整型) (在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so )

at line: Poco::Net::TCPServerParams*pParams = new Poco::Net::TCPServerParams();

波科版本: DPKG -L |格雷普·波科 ii libpoco-dev 1.6.1-AVA3 amd64 C++ 便携式组件 (POCO) 开发文件 ii libpoconet31 1.6.1-AVA3 amd64 C++ 便携式组件 (POCO) 网络库

为了修复它,我在指针上使用删除,但是出现错误

delete pParams

'TCPServerParams.h:98:10: error: 'virtual Poco::Net::TCPServerParams::~TCPServerParams()' is protected'

使用TCPServerParams的一种常见方法是它与TCPServer一起使用。首先,您通过new创建TCPServerParams,然后将其传递到TCPServer,后者拥有参数的所有权。它在 TCP 服务参考中进行了描述。

服务器还拥有 TCPServerParams 对象的所有权。

因此TCPServer删除不需要的参数实例。


不能通过delete手动删除TCPServerParams,因为析构函数受到保护。

在 Poco 库中,许多类都有受保护的析构函数,它迫使您使用Poco::AutoPtr类来管理实例的生存期。

TCPServerParams源于RefCountedObjectRefCountedObject提供参考计数器机制。它具有release方法,该方法可在AutoPtr的生命周期结束时删除对象。

所以你可以写:

Poco::AutoPtr<Poco::Net::TCPServerParams> p(new Poco::Net::TCPServerParams());

内存由AutoPtr自动释放。