4

我对 C++ 智能指针非常陌生,我很难理解关于将它们用于函数参数的建议。

“C++ 编码标准:101 条规则、指南和最佳实践”说这些是传入智能指针的原因。

更喜欢通过(智能)指针传递

  • 如果参数是可选的(因此调用者可以将 null 作为“不可用”或“不关心”值传递)
  • 或者如果函数存储了指针的副本
  • 或以其他方式操纵论点的所有权。

有人可以给我每个例子,为什么不使用智能指针在这种情况下会是一个坏主意?

4

4 回答 4

7

更喜欢通过(智能)指针[当...]

我认为您误读了编码标准。您将其阅读为“这些是使用智能指针的原因”。作者的意图是“这些是使用某种指针的原因,它可能是一个智能指针。”

于 2012-10-01T20:35:11.807 回答
4

更喜欢通过(智能)指针传递

请注意括号中的“聪明”程度?

这个人在这里谈论的是通过指针与引用传递。Smart 在括号中,因为在喜欢智能指针的团队中工作时,您会遵循类似的规则。

于 2012-10-01T20:35:27.663 回答
2

我将假设这个问题通常与指针有关,因为这就是问题中引用的文本所解释的内容。

您想要使用智能指针(或一般来说良好的老式指针)有几个原因。第一个也是最明显的一个是,当您通过引用或指针传递某些内容时,您将指针传递给内存中的项目,这意味着您将获得实际的对象,而不是通过值传递时获得的副本。当您想使用某些函数操作对象时,这很有用,或者只是为了减少复制(想象一下一直将大文本文件作为值发送,那肯定会效率低下!)

接下来,将某些东西作为空值传递的机会。这基本上意味着参数可以作为“不存在”传入,而这又可以在逻辑中处理。例如,如果文件指针为空,则创建一个新文件。

特别是对于智能指针:智能指针是在幕后进行额外管理算法的指针,这可能是引用计数或其他选项。例如,您可以使用 unique_pointer 来确保在任何给定时间只存在一个指向该对象的指针。有关更多信息,请参阅维基百科http://en.wikipedia.org/wiki/Smart_pointer

如果问题确实与一般指针的工作有关,请参阅此介绍http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/

于 2012-10-01T20:38:53.840 回答
1

智能指针存在于一个,也正是一个,函数:

论据的所有权

智能指针强制执行此操作,这样您就不会搞砸了,这很可能是因为手动管理所有权非常容易出错,而智能指针可以保证。

在常规指针上使用智能指针没有其他理由。

于 2012-10-01T20:31:18.700 回答