为什么第二个字符串保存在第一个字符串中?

莫森

我有一个C ++应用程序,它将启动我的C#应用​​程序,并且在一种方法中,我具有以下字符串

const BSTR S1 = _bstr_t("String1");
const BSTR S2 = _bstr_t("String2");

我有当编译器执行一号线断点S1是String1中,但何时会执行2号线S1将字符串2

我想知道为什么会这样吗?

用户名

_bstr_t1是的包装器类BSTR构造函数分配一个BSTR(如果有副本,则增加引用计数),而析构函数BSTR在引用计数器达到零时释放

所以

const BSTR S1 = _bstr_t("String1");

做三件事:

  1. 创建一个临时的,未命名的,_bstr_t包含BSTR指向内存中某处分配的“ String1”的名称。
  2. 将分配BSTRS1这是指针的副本。没有分配或移动数据。
  3. 销毁该临时文件,_bstr_t因为它从未分配给任何事物,因此有效地具有一个操作的作用范围。

_bstr_t引用计数降为零,因此BSTR被释放。这意味着S1at处的存储点已被释放,可以重新用于第二行。使用S1将导致不确定的行为,因此,就像在调试器中查看该行为一样,它可能会从其他领域召唤C'thulu来消耗我们所有的灵魂。幸运的是,程序崩溃的可能性更大。

解决方案:

要么保持_bstr_ts

_bstr_t S1("String1");
// use S1

还是很难做到

const BSTR S1 = SysAllocString(L"String1");
// use S1
SysFreeString(S1);

第一种选择应该是更安全。

_bstr_t 文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从第二个字符串中删除出现在第一个字符串中的字符

来自分类Dev

从第二个字符串中删除出现在第一个字符串中的字符

来自分类Dev

如果第二个字符串中存在第一个字符串中的字母,则无法比较2个字符串-Java

来自分类Dev

如何使用第一个字符串替换第二个字符串

来自分类Dev

确定第一个字符串是否以第二个字符串开头

来自分类Dev

使用python操作和替换第一个字符串并维护第二个字符串行

来自分类Dev

c# - 通过冒号拆分文本框中的字符串并获取第一个字符串和第二个字符串

来自分类Dev

使用递归获取第一个字符串中第二个字符串的第一次出现的索引

来自分类Dev

检查第二个字符串php中的第一个字符串的字符时输出不一致

来自分类Dev

检查第二个字符串php中的第一个字符串的字符时输出不一致

来自分类Dev

与第一个一起存储第二个字符串

来自分类Dev

编写一个静态方法,该方法接受两个字符串并返回一个布尔值,说明第一个字符串是否在第二个字符串中作为子字符串出现

来自分类Dev

java for循环第一个字符串的第一个字符,然后第二个字符串的最后一个字符

来自分类Dev

java for循环第一个字符串的第一个字符,然后第二个字符串的最后一个字符

来自分类Dev

用一个字符串替换第二个和第三个字符串

来自分类Dev

如何在多种条件下从字符串中获取第一个和第二个字符

来自分类Dev

如何比较一个字符串输入是否为第二个字符串输入的前缀?

来自分类Dev

如何将两个字符串之间的行复制到一个新的文本文件中,该文件完全匹配第一个字符串,部分匹配第二个字符串

来自分类Dev

快速将第二个字符串复制到第一个字符串时,如何使用“ 0”填充第一个字符串的剩余空间?

来自分类Dev

决定将哪个字符串转到similar_text 中的第一个/第二个参数

来自分类Dev

在C ++中使用sort排序从第二个字符到最后一个字符的字符串

来自分类Dev

在C ++中使用sort排序从第二个字符到最后一个字符的字符串

来自分类Dev

HTML 标签中的第一个字符串叫什么?

来自分类Dev

为什么我的过程仅从字符串中插入第一个字符?

来自分类Dev

为什么snprintf更改第二个字符串?

来自分类Dev

C ++ fstream仅保存字符串的第一个字符

来自分类Dev

为什么此代码反复从stringstream中仅提取第一个字符串?

来自分类Dev

为什么字符串连接仅消耗第一个字符串?

来自分类Dev

在MySQL中替换字符串中的第一个字符

Related 相关文章

  1. 1

    从第二个字符串中删除出现在第一个字符串中的字符

  2. 2

    从第二个字符串中删除出现在第一个字符串中的字符

  3. 3

    如果第二个字符串中存在第一个字符串中的字母,则无法比较2个字符串-Java

  4. 4

    如何使用第一个字符串替换第二个字符串

  5. 5

    确定第一个字符串是否以第二个字符串开头

  6. 6

    使用python操作和替换第一个字符串并维护第二个字符串行

  7. 7

    c# - 通过冒号拆分文本框中的字符串并获取第一个字符串和第二个字符串

  8. 8

    使用递归获取第一个字符串中第二个字符串的第一次出现的索引

  9. 9

    检查第二个字符串php中的第一个字符串的字符时输出不一致

  10. 10

    检查第二个字符串php中的第一个字符串的字符时输出不一致

  11. 11

    与第一个一起存储第二个字符串

  12. 12

    编写一个静态方法,该方法接受两个字符串并返回一个布尔值,说明第一个字符串是否在第二个字符串中作为子字符串出现

  13. 13

    java for循环第一个字符串的第一个字符,然后第二个字符串的最后一个字符

  14. 14

    java for循环第一个字符串的第一个字符,然后第二个字符串的最后一个字符

  15. 15

    用一个字符串替换第二个和第三个字符串

  16. 16

    如何在多种条件下从字符串中获取第一个和第二个字符

  17. 17

    如何比较一个字符串输入是否为第二个字符串输入的前缀?

  18. 18

    如何将两个字符串之间的行复制到一个新的文本文件中,该文件完全匹配第一个字符串,部分匹配第二个字符串

  19. 19

    快速将第二个字符串复制到第一个字符串时,如何使用“ 0”填充第一个字符串的剩余空间?

  20. 20

    决定将哪个字符串转到similar_text 中的第一个/第二个参数

  21. 21

    在C ++中使用sort排序从第二个字符到最后一个字符的字符串

  22. 22

    在C ++中使用sort排序从第二个字符到最后一个字符的字符串

  23. 23

    HTML 标签中的第一个字符串叫什么?

  24. 24

    为什么我的过程仅从字符串中插入第一个字符?

  25. 25

    为什么snprintf更改第二个字符串?

  26. 26

    C ++ fstream仅保存字符串的第一个字符

  27. 27

    为什么此代码反复从stringstream中仅提取第一个字符串?

  28. 28

    为什么字符串连接仅消耗第一个字符串?

  29. 29

    在MySQL中替换字符串中的第一个字符

热门标签

归档