gpt4 book ai didi

C++:如何使用 new 来查找函数返回值的存储?

转载 作者:可可西里 更新时间:2023-11-01 16:30:11 24 4
gpt4 key购买 nike

我正在阅读 Bjarne Stroustrup 所著的The C++ Programming Language 第 3 版,并试图完成所有练习。我不确定如何完成 6.6 节中的练习 13,所以我想我应该求助于 Stack Overflow 以获得一些见解。这是问题的描述:

Write a function cat() that takes two C-style string arguments and returns a single string that is the concatenation of the arguments. Use new to find store for the result.

到目前为止,这是我的代码,在我不确定要做什么的地方带有问号:

? cat(char first[], char second[])
{
char current = '';
int i = 0;

while (current != '\0')
{
current = first[i];
// somehow append current to whatever will eventually be returned
i++;
}

current = '';
i = 0;

while (current != '\0')
{
current = second[i];
// somehow append current to whatever will eventually be returned
i++;
}

return ?
}

int main(int argc, char* argv[])
{
char first[] = "Hello, ";
char second[] = "World!";

? = cat(first, second);

return 0;
}

这是我的问题:

  1. 如何使用 new 查找商店?我应该做类似 std::string* result = new std::string; 的事情还是应该使用 new 以某种方式创建另一个 C 风格的字符串?
  2. 与上一个问题相关,我应该从 cat() 返回什么?如果我必须使用 new,我认为它需要是一个指针。但是指向什么的指针?
  3. 虽然问题没有提到使用delete 释放内存,但我知道我应该这样做,因为我将使用new 进行分配。我应该在 main 的末尾删除,然后再返回吗?

最佳答案

How do I use new to find store? Am I expected to do something like std::string* result = new std::string; or should I be using new to create another C-style string somehow?

后者;该方法采用 C 风格的字符串,文本中没有任何内容表明它应该返回任何其他内容。因此函数的原型(prototype)应该是 char* cat(char const*, char const*)。当然,这不是您通常编写函数的方式;手动内存管理在现代 C++ 中是完全禁忌的,因为它很容易出错。

Although the problem doesn't mention using delete to free memory, I know I should because I will have used new to allocate. Should I just delete at the end of main, right before returning?

在这个练习中,是的。在现实世界中,不:就像我上面说的,这完全是禁忌。实际上,您会返回一个 std::string 并且使用new 分配内存。 如果您发现自己手动分配内存(并假设这是有充分理由的),您不会将该内存放在原始指针中,而是放在智能指针中 – std::unique_ptrstd::shared_ptr

关于C++:如何使用 new 来查找函数返回值的存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17903554/

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