我使用Poco并创建TCP服务器params如下: Poco::Net::TCPServerParams *pParams = new::Net::TCPServerParams();
当我使用Valgring时,我得到了明确的内存泄漏: 1271 ==00:00:01:37.131 48682== at 0x4C2903F: operator new(无符号长)(在==00:00:01:37.131中)
一行: Poco::Net::TCPServerParams *pParams = new::Net::TCPServerParams();
poco版本: dpkg -l x grep Poco ii libpoco-dev 1.6.1-AVA3 3 amd64 C++便携组件(POCO)开发文件ii libpoconet31 1.6.1-AVA3 amd64 C++便携组件(POCO)网络库
为了修复它,我在指针上使用了delete,但是我得到了一个错误。
delete pParams
'TCPServerParams.h:98:10:错误:‘虚拟TCPServerParams.h:98:10受保护’
发布于 2019-05-23 04:52:59
使用TCPServerParams的一个常见方法是它与TCPServer一起工作。首先,通过TCPServerParams通过new创建new,然后将其传递给TCPServer,后者获取对参数的所有权。它在TCPServer参考文献中进行了描述。
服务器还拥有TCPServerParams对象的所有权。
因此,TCPServer删除不必要的param实例。
您不能手动删除TCPServerParams,因为析构函数是受保护的。
在Poco库中,许多类都保护析构函数,它迫使您使用Poco::AutoPtr类来管理实例的生存期。
TCPServerParams来源于RefCountedObject。RefCountedObject提供了参考计数器机制。它有release方法,当AutoPtr的生存期结束时,它会删除一个对象。
这样你就可以写:
Poco::AutoPtr<Poco::Net::TCPServerParams> p(new Poco::Net::TCPServerParams());内存由AutoPtr自动释放。
https://stackoverflow.com/questions/56265840
复制相似问题