gpt4 book ai didi

c++ - 我应该忘记动态内存分配和指针并始终通过 v 吗?

转载 作者:行者123 更新时间:2023-11-28 00:44:43 24 4
gpt4 key购买 nike

我注意到,由于 RVO,大多数 C++ 专家总是建议最好按值传递。这让我不必太担心指针操作,也更容易编写代码。那里没有提示。这让我想知道完全不使用动态内存分配(在堆上)并始终按值传递参数和返回结果是否是正确的方法?

这意味着不要像这样提出签名:

Character* getCharacter(Sprite *sprite, Action* action)

我应该或多或少地坚持这样的签名:

Character getCharacter(Sprite sprite, Action action)

我的理解对吗?或者我只是认为我解冻了一个油腻的导管?

最佳答案

他们各有利弊。请记住,使用“总是”这样的词是绝对的。只有黑暗面处理绝对问题。

因此,让我们看看每种方式以及何时使用它们。

  • 当传递的对象较小时,按值传递比较好(因为创建了本地拷贝)。如果您想确保不会意外更改原始数据,这也很好。它的缺点是它制作了一个本地拷贝,如果它真的很大,那可能会很糟糕。
  • 按引用传递只传递一个内存地址。因此,可以以相对较低的占用空间传递大型对象。此外,有了引用,您可以修改原始文件(这既好又坏)。这使您能够“返回”多个变量(可以这么说)。很明显,这里的大缺点是您可能会错误地更改原始数据。
  • Constant pass by reference 被普遍认为是做事的一个非常强大的候选者。它具有按引用传递和值传递的优点。占地面积小,因为它是一个引用,你不能改变原来的。对于您在方法中对变量的使用需要稍作更改这一事实,没有多少缺点可以接受。请记住,它是一个常量,因此不能在函数中修改。

请记住,没有 Elixir 。没有什么总是更好的。确定您需要什么并为工作选择合适的工具。

编辑:也有人说过。传递与动态分配不同。动态分配只发生在“new”关键字上。我的建议是在您更好地理解参数和指针之前,暂时避免使用“new”关键字。

关于c++ - 我应该忘记动态内存分配和指针并始终通过 v 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864492/

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