最近ブーストを使い始めましたが、提供されている機能と API に感銘を受けています。
boost::shared_ptr を使用して、Valgrind でプログラムを確認すると、かなりの数の「まだ到達可能」なメモリ リークが見つかりました。Valgrind のドキュメントによると、これらは問題ではありません。ただし、以前は標準の C++ ライブラリしか使用していなかったので、作成するプログラムがメモリ リークから完全に解放されていることを常に確認していました。
私の質問は、これらのメモリ リークは心配すべきことですか? reset() を使用してみましたが、参照カウントを減らすだけで、メモリの割り当てを解除しません。これらを安全に無視できますか、またはboost::shared_ptrによって割り当てられたメモリを強制的に解放する方法はありますか?
ありがとうございました。
EDIT1:
このコードでは 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)
これは、メモリ リークを起こしているのはリサイクル コードであることを意味しますか?
ありがとう。