此代码块中会发生什么

what happens in this block of code?

本文关键字:什么 代码      更新时间:2023-10-16

当我这样做时会发生什么?当我删除"boo1"的第一个初始化时,它会打印 boo2,但现在它仍然不打印任何内容。这是否意味着指针分配了一个随机内存并为其分配了"boo1"值,现在我无法访问它还是什么?

string *p;
*p="boo1"; 
p=new string;
*p="boo2";
cout << *p;   //prints nothing

第 1 行:"p"包含随机值,即指随机内存地址。

第 2 行:"*P"引用的随机内存块被解释为字符串实例。此实例由"boo1"分配。

试试这样:

string *p = new string;
*p = "boo1";
cout << *p << 'n';
*p = "boo2";
cout << *p << 'n';
delete p;

请记住:

  1. std::string 与愚蠢的 char[] 数组不同!
  2. 使用前必须分配所有指针!
  3. 所有"新"都必须有相应的"删除"!

如果你将一个字符串声明为指针(字符串 *p),你必须为它分配内存,

所以正确的工作方法是:

string *p = new string;
*p = "boo1";
cout << *p << 'n';
*p = "boo2";
cout << *p << 'n';

前面的答案是正确的,但是为什么不使用参考,在您的情况下似乎更方便。像这样:

std::string p;
p = "boo1";
std::cout << p << std::endl;
p = "boo2";
std::cout << p << std::endl;

问候

米歇尔。