如何修复 poco Poco::Net::TCPServerParams() valgrind 明确泄漏
How to fix poco Poco::Net::TCPServerParams() valgrind definite leak
我正在使用 Poco,我正在创建 TCP 服务器参数,如下所示:
Poco::Net::TCPServerParams *pParams = new Poco::Net::TCPServerParams();
当我使用 Valgring 时,我确实发生了内存泄漏:
1271 ==00:00:01:37.131 48682== at 0x4C2903F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
)
行:Poco::Net::TCPServerParams *pParams = new 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: error: ‘virtual Poco::Net::TCPServerParams::~TCPServerParams()’ is protected'
使用 TCPServerParams
的一种常见方法是它与 TCPServer
一起使用。首先,您通过 new
创建 TCPServerParams
,然后将其传递给 TCPServer
,后者获得了参数的所有权。它在 reference of TCPServer.
中有描述
The server also takes ownership of the TCPServerParams object.
所以TCPServer
删除不需要的参数实例。
您不能通过delete
手动删除TCPServerParams
,因为析构函数受到保护。
在 Poco 库中,许多 classes 都有保护析构函数,它迫使您使用 Poco::AutoPtr
class 来管理实例的生命周期。
TCPServerParams
派生自 RefCountedObject
。 RefCountedObject
提供引用计数器机制。它有 release
方法,当 AutoPtr
的生命周期结束时删除一个对象。
所以你可以这样写:
Poco::AutoPtr<Poco::Net::TCPServerParams> p(new Poco::Net::TCPServerParams());
内存由AutoPtr
自动释放。
我正在使用 Poco,我正在创建 TCP 服务器参数,如下所示: Poco::Net::TCPServerParams *pParams = new Poco::Net::TCPServerParams();
当我使用 Valgring 时,我确实发生了内存泄漏: 1271 ==00:00:01:37.131 48682== at 0x4C2903F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so )
行:Poco::Net::TCPServerParams *pParams = new 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: error: ‘virtual Poco::Net::TCPServerParams::~TCPServerParams()’ is protected'
使用 TCPServerParams
的一种常见方法是它与 TCPServer
一起使用。首先,您通过 new
创建 TCPServerParams
,然后将其传递给 TCPServer
,后者获得了参数的所有权。它在 reference of TCPServer.
The server also takes ownership of the TCPServerParams object.
所以TCPServer
删除不需要的参数实例。
您不能通过delete
手动删除TCPServerParams
,因为析构函数受到保护。
在 Poco 库中,许多 classes 都有保护析构函数,它迫使您使用 Poco::AutoPtr
class 来管理实例的生命周期。
TCPServerParams
派生自 RefCountedObject
。 RefCountedObject
提供引用计数器机制。它有 release
方法,当 AutoPtr
的生命周期结束时删除一个对象。
所以你可以这样写:
Poco::AutoPtr<Poco::Net::TCPServerParams> p(new Poco::Net::TCPServerParams());
内存由AutoPtr
自动释放。