Nehmen wir an, wir von woanders eine char string haben, die später als Eingangsparameter auf eine Funktion, die breite Strings akzeptiert verwendet wird.Ist es immer sicher, ein temporäres AnsiString- oder UnicodeString-Objekt als Parameter für eine Funktion anzugeben?
Bei Variante 1 wird eine von der Unicodezeichenfolge char und in einem zweiten Schritt als Wchar_t * Zeiger auf die Loadlibrary() Funktion erstellt wird.
Ist es immer sicher diese in eine Codezeile zu verkürzen, wie in Variante 2 geschrieben? Wird das temporäre UnicodeString-Objekt während seiner Verwendung in der Funktion selbst immer lange genug leben? Könnte es irgendwelche besonderen Umstände geben, die das Objekt zu früh zerstören würden?
char *libstr = "test.dll";
//...
//Variant 1
UnicodeString us(libstr);
HINSTANCE lib = LoadLibrary(us.w_str());
//Variant 2
HINSTANCE lib = LoadLibrary(UnicodeString(libstr).w_str());
Danke,
Edit: @ David Heffernan Dank für die an die beantworteten Frage zeigt in Bezug auf Lebensdauer von temporären Argumenten in C++ Da dies eine spezifische Frage für UnicodeString- und Ansistring-Objekte in Delphi und C++ Builder, und es werden diese Objekte in der VCL codiert Pascal verwenden, ich frage mich immer noch über das Thema und ich fühle mich Ihr Link Thema 100% erstreckt sich nicht auf, obwohl es sehr hilfreich, über das Thema ist. Vielen Dank.
AnsiString und UnicodeString sind als Klassen in C++ implementiert, daher folgen sie denselben Regeln wie jede andere Klasse und unterliegen den gleichen Lebensdauerregeln. Nebenbei bemerkt, Sie sollten 'c_str()' anstelle von 'w_str()' verwenden. –
Eine etwas verwandte Frage ist http://stackoverflow.com/q/13474486/3235496 (andere Situation, aber interessante Informationen). – manlio
@manlio, interessante Informationen in der Tat, danke. –