gpt4 book ai didi

c++ - 以下声明之间的区别

转载 作者:行者123 更新时间:2023-11-28 02:36:49 24 4
gpt4 key购买 nike

最近我对 new 关键字与字符串数据类型的使用感到困惑。你能试着澄清一下吗

下面的字符串初始化有什么区别:

1)

string* name = new string("abc") ;
....
delete name;

2)

string name = "abc";

是否建议使用 new 关键字,因为字符串中的值是作为 std::string 的内部缓冲区存储在堆中的任何方式。如果有人用存储位置解释它会很好。

返回字符串与返回字符串有什么区别*

string* name()
{
string* name = new string("abc") ;
return name;
}

string name()
{
string name = "abc";
return name;
}

最佳答案

与第一种方法相比,第二种方法更受欢迎的原因有几个:

  • 最重要的原因:stringstring,句号。一个string*可能指向一个string,也可能是NULL/nullptr,也可能指向内存中的随机位置。因此,您应该尽可能使用普通的旧 string 而不是 string*,因为使用它们不太容易出错。

  • 声明一个 string 对象将它放在堆栈上,这意味着它会在离开作用域时自动清理。使用 new 意味着您现在必须手动清理分配的内存。

  • new 是一个比较慢的操作。使用堆栈变量要快得多。

虽然 string 将其数据存储在堆上,但在堆上分配 string 本身仍然增加了另一个间接级别。

关于c++ - 以下声明之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27163961/

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