我最近才开始使用 boost,它提供的功能和 API 给我留下了深刻的印象。
在使用 boost::shared_ptr 时,当我用 Valgrind 检查程序时,我发现了相当多的“仍然可以访问”的内存泄漏。根据 Valgrind 的文档,这些都不是问题。但是,由于我过去只使用标准 C++ 库,因此我始终确保编写的任何程序都完全没有内存泄漏。
我的问题是,这些内存泄漏是否值得担心?我尝试使用 reset(),但是它只会减少引用计数,不会释放内存。我可以安全地忽略这些,或者以任何方式强制释放 boost::shared_ptr 分配的内存吗?
谢谢你。
编辑1:
我在这段代码中使用了 apache thrift。使用选项--show-reachable=yes 进一步检查valigrind,几乎所有泄漏消息都类似于以下内容:
==6813== 24 bytes in 1 blocks are still reachable in loss record 3 of 21
==6813== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6813== by 0x5E7A783: CRYPTO_malloc (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0)
==6813== by 0x5EF524A: lh_insert (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0)
==6813== by 0x5E7BC17: ??? (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0)
==6813== by 0x5E7C268: ??? (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0)
==6813== by 0x5BF43C5: SSL_CTX_free (in /lib/x86_64-linux-gnu/libssl.so.1.0.0)
==6813== by 0x4E9574F: apache::thrift::transport::SSLContext::~SSLContext() (TSSLSocket.cpp:71)
==6813== by 0x4E95768: apache::thrift::transport::SSLContext::~SSLContext() (TSSLSocket.cpp:74)
==6813== by 0x4E96C08: apache::thrift::transport::TSSLSocketFactory::~TSSLSocketFactory() (sp_counted_base_gcc_x86.hpp:145)
==6813== by 0x4E96C98: apache::thrift::transport::TSSLSocketFactory::~TSSLSocketFactory() (TSSLSocket.cpp:369)
==6813== by 0x42A986: void boost::checked_delete<apache::thrift::transport::TSSLSocketFactory>(apache::thrift::transport::TSSLSocketFactory*) (checked_delete.hpp:34)
==6813== by 0x42ADE3: boost::detail::sp_counted_impl_p<apache::thrift::transport::TSSLSocketFactory>::dispose() (sp_counted_impl.hpp:78)
这是否意味着泄漏内存的是节俭代码?
谢谢。