boost::shared_ptr
を使用して、Python スクリプトで C++ ファイル I/O ストリーム オブジェクトを使用できるようにしようとしています。ただし、生成されたラッパーは、メモリ リークが発生していると警告します。
問題を示す最小限の.i
ファイルを次に示します。
%module ptrtest
%include "boost_shared_ptr.i"
%include "std_string.i"
%shared_ptr( std::ofstream )
%{
#include <fstream>
#include <boost/shared_ptr.hpp>
typedef boost::shared_ptr< std::ofstream > ofstream_ptr;
ofstream_ptr mk_out(const std::string& fname ){
return ofstream_ptr( new std::ofstream( fname.c_str() ) );
}
%}
ofstream_ptr mk_out(const std::string& fname );
%pythoncode %{
def leak_memory():
''' demonstration function -- when I call
this, I get a warning about memory leaks
''''
ostr=mk_out('/tmp/dont_do_this.txt')
%}
警告は次のとおりです。
In [2]: ptrtest.leak_memory()
swig/python detected a memory leak of type 'ofstream_ptr *', no destructor found.
ファイルを変更して.i
、shared_ptr を適切に破棄する方法をインターフェイスに伝える方法はありますか?