他のどこかのchar文字列があるとしましょう。後でそれは、ワイド文字列を受け入れる関数の入力パラメータとして使用されます。一時的なAnsiStringオブジェクトまたはUnicodeStringオブジェクトを関数のパラメータとして指定するのは常に安全ですか?
バリアント1では、UnicodeStringがchar文字列から作成され、2番目の手順でLoadLibrary()関数へのwchar_t *ポインタとして使用されます。
バリアント2で記述されているように、これを1つのコード行に短縮することは常に安全ですか?特に、一時的なUnicodeStringオブジェクトは、関数自体で使用されている間、十分に長く存続しますか?オブジェクトを早期に破壊するような特別な状況がありますか?
char *libstr = "test.dll";
//...
//Variant 1
UnicodeString us(libstr);
HINSTANCE lib = LoadLibrary(us.w_str());
//Variant 2
HINSTANCE lib = LoadLibrary(UnicodeString(libstr).w_str());
おかげで、
編集: @デビッドHeffernanのこれはUnicodeStringのための具体的な質問であるためC++ の一時的な引数の答え質問に関するライフスパンを指しているとDelphiでオブジェクトをAnsiStringのため おかげで、 C++ Builderでは、これらのオブジェクトはPascalを使用してVCLにコード化されていますが、私はまだトピックについて疑問を抱いています。トピックに100%関心はありません。ありがとうございました。
AnsiStringとUnicodeStringはC++でクラスとして実装されているため、他のクラスと同じ規則に従っており、同じ生涯規則の影響を受けます。ちなみに、 'w_str()'の代わりに 'c_str()'を使うべきです。 –
多少関連した質問はhttp://stackoverflow.com/q/13474486/3235496(別の状況だが興味深い情報)です。 – manlio
@manlio、本当に面白い情報、ありがとう。 –