Possible Duplicate:
C++ Objects: When should I use pointer or reference




我刚来自Java,对C ++还是陌生的。在一个月的时间里,我设法自学了C ++。我已经在这里和那里编码了一些基本的东西,并且了解了一些概念(多态,虚函数等)。尽管我知道Pointers的工作原理,但是我仍然不知道何时使用它们。

我知道,当您想使用new在堆上创建某些内容时,必须使用一个指针,但是我无法识别应该使用指针和引用的其他情况。关于何时应该使用我应该知道的指针有某种经验法则吗?就像何时函数参数中应带有&或*等。对菜鸟问题表示抱歉。

最佳答案

其他So问题(http://stackoverflow.com/questions/7058339/c-when-to-use-references-vs-pointers)中的答案相同:

尽可能使用引用,而必须使用指针。

避免指针,直到不能。

原因是与其他任何构造相比,指针使事情变得更难遵循/阅读,更不安全并且更加危险。

因此,经验法则是仅在没有其他选择时才使用指针。

例如,当函数在某些情况下可以返回nullptr且假定会返回时,返回指向对象的指针是有效选项。也就是说,更好的选择是使用类似于boost :: optional的东西。

另一个示例是使用指向原始内存的指针进行特定的内存操作。应该将其隐藏并定位在代码的非常狭窄的部分,以帮助限制整个代码库中的危险部分。

在您的示例中,使用指针作为参数毫无意义,因为:

如果您提供nullptr作为参数,那么您将进入undefined-behaviour-land;
引用属性版本不允许(没有容易发现的技巧)1的问题。
对于用户而言,引用属性版本更易于理解:您必须提供有效的对象,而不是可以为null的对象。
如果函数的行为必须在有或没有给定对象的情况下都可以使用,则使用指针作为属性建议您可以将nullptr用作参数,这对函数很好。这是用户与实现代码之间的一种契约。

关于c++ - C++:在指针和引用上,什么时候使用它们? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13171518/

10-11 23:11
查看更多