0
でregex_t構造体は、regex_t
を解放するために、文字列とデュアル機能regfree()
からregex_t
構造体をコンパイルregcomp()
機能があります(私は解放が原因に必要とされていることを理解しますregex_t
はいくつかのダイナミックメモリを内部的に使用します)。ベストな方法(コンパイル)C
しかし、このマニュアルページには、regex_t
を別のregex_t
構造体にクローン化する機能は記載されていません。それを行う方法はありますか?
私が知ることができる唯一のメカニズムは、ソース文字列から再コンパイルしていますが、それは単にregex_t
レベルのコピーよりも効率が悪いと思います。
私のアプリケーションでは、別のクラスStringFilterItemの一部である 'regex_t'オブジェクトを持っています(詳細はhttps://github.com/telefonicaid/fiware-orion/blob/d6969490c8db77b2147fccbd986aab49303b5e8c/src/lib/rest/です)。 StringFilter.h#L115)。私は、コンパイルされた 'regex_t'フィールドを含め、内部要素を含め、StringFilterItemクラスのインスタンスをコピーする必要があります。現時点では正規表現を再コンパイルしていますが(元の正規表現の文字列はStringFilterItemの一部です)、より効率的なメカニズムが存在するかどうかを知るためにSOFで尋ねました。 – fgalan
もし私があなただったら、安全のために文字列を保持して再コンパイルします。システムのパフォーマンスには、** regcomp **の数字だけを使用することはできません。あるいは、同時に使用する機会がないならば、私が危険にさらされ、 'regex_t'のコピーを使用しています。それは、それが保持するポインタは読み込みのみであり、どこからでも問題はありません。取得するアドバイスは実装固有のもので、変更される可能性があります。 –