gpt4 book ai didi

delphi - 将临时 AnsiString 或 UnicodeString 对象作为参数提供给函数总是安全的吗?

转载 作者:行者123 更新时间:2023-12-03 19:49:59 29 4
gpt4 key购买 nike

假设我们有一个来自其他地方的 char 字符串,稍后将其用作接受宽字符串的函数的输入参数。

在变体 1 中,从 char 字符串创建 UnicodeString,并在第二步中用作指向 LoadLibrary() 函数的 wchar_t* 指针。

将其缩短为变体 2 中编写的一个代码行总是安全的吗?特别是,临时 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() );

谢谢,

编辑:
@大卫赫弗南
感谢您指出有关 C++ 中临时参数生命周期的已回答问题
由于这是 Delphi 和 C++ Builder 中 UnicodeString 和 AnsiString 对象的特定问题,并且这些对象是使用 Pascal 在 VCL 中编码的,所以我仍然想知道这个主题,我觉得你的链接没有 100% 涵盖这个主题,虽然这对这个主题非常有帮助。谢谢你。

最佳答案

我最初将其作为此问题的副本关闭:C++: Life span of temporary arguments?

我相信关闭是有效的。那里的答案告诉你:

Temporary objects are destroyed as the last step in evaluating the full-expression that (lexically) contains the point where they were created.



这意味着您的临时文件比函数调用更有效并且是安全的。

您通过争辩所讨论的类不是 C++ 类来反对闭包是重复的。但这是一个错误的信念。它们是 C++ 类。并且适用 C++ 规则。

关于delphi - 将临时 AnsiString 或 UnicodeString 对象作为参数提供给函数总是安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38300789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com