2016-04-25 10 views
0

でregex_t構造体は、regex_tを解放するために、文字列とデュアル機能regfree()からregex_t構造体をコンパイルregcomp()機能があります(私は解放が原因に必要とされていることを理解しますregex_tはいくつかのダイナミックメモリを内部的に使用します)。ベストな方法(コンパイル)C

しかし、このマニュアルページには、regex_tを別のregex_t構造体にクローン化する機能は記載されていません。それを行う方法はありますか?

私が知ることができる唯一のメカニズムは、ソース文字列から再コンパイルしていますが、それは単にregex_tレベルのコピーよりも効率が悪いと思います。

答えて

0

なぜ "クローン"ですか? regex_tには、それが比較された入力に関する情報(regexec)は含まれていません。これは単に正規表現の "コンパイルされた"バージョンです。コピーする必要はありません。ちょうどそれを使用します。

+0

私のアプリケーションでは、別のクラスStringFilterItemの一部である 'regex_t'オブジェクトを持っています(詳細はhttps://github.com/telefonicaid/fiware-orion/blob/d6969490c8db77b2147fccbd986aab49303b5e8c/src/lib/rest/です)。 StringFilter.h#L115)。私は、コンパイルされた 'regex_t'フィールドを含め、内部要素を含め、StringFilterItemクラスのインスタンスをコピーする必要があります。現時点では正規表現を再コンパイルしていますが(元の正規表現の文字列はStringFilterItemの一部です)、より効率的なメカニズムが存在するかどうかを知るためにSOFで尋ねました。 – fgalan

+0

もし私があなただったら、安全のために文字列を保持して再コンパイルします。システムのパフォーマンスには、** regcomp **の数字だけを使用することはできません。あるいは、同時に使用する機会がないならば、私が危険にさらされ、 'regex_t'のコピーを使用しています。それは、それが保持するポインタは読み込みのみであり、どこからでも問題はありません。取得するアドバイスは実装固有のもので、変更される可能性があります。 –

関連する問題