我对C ++智能指针很陌生,我很难理解这个关于将它们用于函数参数的建议。
“C ++编码标准:101规则,指南和最佳实践”说这些是传递智能指针的原因。
首选(智能)指针
- 如果参数是可选的(因此调用者可以将null作为“不可用”或“不关心”值传递)
- 或者如果函数存储指针的副本
- 或以其他方式操纵论证的所有权。
有人可以给我一些他们每个人的例子,为什么不使用智能指针在这些情况下是个坏主意?
答案 0 :(得分:7)
首选(智能)指针 [当......]
我认为你误读了编码标准。您将其读作“这些是使用智能指针的原因”。作者的意图是“这些是使用某种指针的原因,这可能是一个智能指针。”
答案 1 :(得分:4)
首选(智能)指针
请注意括号中的“智能”是什么?
这里的人在谈论的是通过指针与参考。智能存在于括号中,因为当您在喜欢智能指针的团队中工作时,您会遵循类似的规则。
答案 2 :(得分:2)
我将假设这个问题与指针有关,因为这就是问题中引用的文字正在解释的内容。
为什么你想要使用智能指针(或一般的老式指针)有几个原因。第一个也是最明显的一个是当你通过引用或指针传递某些东西时,你将指针传递给内存中的项目,这意味着你得到的是实际的对象而不是副本,就像你在传递值时得到的那样。当你想使用某个函数操作一个对象时,这很有用,或者只是为了减少复制(想象一直将一个大文本文件作为一个值发送,这肯定会效率低下!)
接下来,将一些东西作为空值传递的机会。这基本上意味着参数可以作为“不存在”传递,而“不存在”又可以在逻辑中处理。例如,如果文件指针为null,则创建一个新文件。
具体来说,对于智能指针:智能指针是在幕后有额外管理算法的指针,可以是引用计数或其他选项。例如,您可以使用unique_pointer来确保在任何给定时间只存在一个指向该对象的指针。有关更多信息,请参阅维基百科http://en.wikipedia.org/wiki/Smart_pointer
如果确实问题与一般指针的运作有关,请参阅此简介http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/
答案 3 :(得分:1)
智能指针存在于一个功能中,只有一个功能:
论证的所有权
智能指针强制执行此操作,以便您不会将其启动,这很可能是因为手动管理所有权非常容易出错,而智能指针可以保证。
在常规指针上使用智能指针没有其他理由。