gpt4 book ai didi

关于传递对象的 C++ 约定(指针与引用)

转载 作者:行者123 更新时间:2023-12-01 14:23:33 25 4
gpt4 key购买 nike

我想制定将参数传递给函数/方法的约定。我知道这是一个常见的问题,并且已经回答了很多次,但是我搜索了很多,没有找到任何让我完全满意的东西。

值传递很明显,我就不提了。我想到的是:

  1. 通过非常量引用 意味着该对象是MODIFIED
  2. 通过const 引用 意味着该对象是USED
  3. 通过指针 传递意味着对对象的引用将被存储。是否传递所有权取决于上下文。

它似乎是一致的,但是当我想选择堆分配的对象并将其传递给 2.case 参数时,它看起来像这样:

void use(const Object &object) { ... }

//...

Object *obj = getOrCreateObject();
use(*obj);

Object &obj = *getOrCreateObject();
use(obj);

我觉得两者都很奇怪。你有什么建议?

PS 我知道应该避免使用原始指针并使用 smart(更容易的内存管理和所有权表达),这可能是重构我从事的项目的下一步。

最佳答案

如果您愿意,可以使用这些约定。但请记住,在处理其他人编写的代码时,您不能假定约定。您也不能假设阅读您的代码的人知道您的约定。当接口(interface)可能不明确时,您应该用注释记录接口(interface)。

Passing by pointer means, that object is going to be STORED. Who's its owner will depend on the context.

我只能想到一个指针参数的所有权应该转移给被调用者的上下文:智能指针的构造函数。

除了可能的存储意图外,指针参数还可以与引用参数具有相同的含义,此外参数是可选的。您通常不能用引用来表示可选参数,因为它们不能为 null - 尽管对于自定义类型,您可以使用对标记值的引用。

Both look weird to me. What would you advise?

在我看来都不奇怪,所以我的建议是习惯。

关于关于传递对象的 C++ 约定(指针与引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49475680/

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