C++ std::string を返すメソッドがあり、それを c_str() に変換してから sqlite3_bind_text に渡します。私の質問は、これは SQLITE_STATIC または SQLITE_TRANSIENT を使用する必要がありますか?
sqlite3_bind_text(insertStatement, 0, suspect->GetIpString().c_str(), -1, SQLITE_STATIC);
// Do some stuff in same function then sqlite3_step
sqlite3_bind_text のドキュメントには、
sqlite3_bind_blob()、sqlite3_bind_text()、および sqlite3_bind_text16() の 5 番目の引数は、SQLite が処理を終了した後に BLOB または文字列を破棄するために使用されるデストラクタです。sqlite3_bind_blob()、sqlite3_bind_text()、または sqlite3_bind_text16() の呼び出しが失敗した場合でも、BLOB または文字列を破棄するためにデストラクタが呼び出されます。5 番目の引数が特別な値 SQLITE_STATIC である場合、SQLite は情報が静的で管理されていない領域にあり、解放する必要がないと想定します。5 番目の引数の値が SQLITE_TRANSIENT の場合、SQLite は、sqlite3_bind_*() ルーチンが戻る前に、すぐにデータの独自のプライベート コピーを作成します。
GetIpString は std::string を返しますが、明示的にコピーを作成しない場合、その文字列は呼び出し後も存在し続けますか? また、一般的に SQLITE_TRANSIANT なしで .c_str() を使用しても安全ですか? SQLITE_TRANSIENT が安全な選択であることはわかっていますが、このクエリは頻繁に実行されるため、必要がない場合はコピー/パフォーマンスへの影響を避けたいと考えています。