我刚刚来自Java并且是C ++的新手。在一个月的时间里,我成功地自学了C ++。我已经在这里和那里编写了一些基本的东西,并理解了一些概念(多态,虚函数等)。虽然我知道指针如何工作,但我仍然无法知道何时使用它们。
我知道当你想使用new在堆上创建一些东西时,你必须使用一个指针,但是我无法识别应该使用指针和引用的其他情况。关于何时使用我应该知道的指针,是否有某种经验法则?就像什么时候应该有功能参数&或者*在他们中等。对不起这个菜鸟问题。
答案 0 :(得分:1)
相同答案其他问题(http://stackoverflow.com/questions/7058339/c-when-to-use-references-vs-pointers):
尽可能使用参考,指向任何地方的指针。
在你做不到之前避免使用指针。
原因是指针比其他任何结构都更难以跟踪/阅读,安全性更低,操作更危险。
因此,只有在没有其他选择时才使用指针。
例如,当函数在某些情况下可以返回nullptr并且假设它将返回时,返回指向对象的指针是一个有效选项。也就是说,更好的选择是使用类似boost :: optional的东西。
另一个例子是使用指向原始内存的指针进行特定的内存操作。这应隐藏并本地化在代码的非常狭窄的部分,以帮助限制整个代码库的危险部分。
在您的示例中,使用指针作为参数没有意义,因为:
如果你提供nullptr作为参数,你将进入undefined-behavior-land; 引用属性版本不允许(不容易发现技巧)1的问题。 对于用户来说,引用属性版本更容易理解:您必须提供有效的对象,而不是可以为null的对象。 如果函数的行为必须使用或不使用给定对象,那么使用指针作为属性建议您可以将nullptr作为参数传递,并且它对于函数来说很好。这是用户和实现代码之间的一种契约。
答案 1 :(得分:0)
使用引用作为函数参数(简单,高效,(大多数)安全)。
使用指针作为对象的非拥有成员(使用指针进行重新分配往往比使用引用更有意义。)
使用智能指针拥有堆分配的对象(并避免大多数对象的堆分配)。
也可以使用指针,其中nullptr
是指针的理想可能值,并且在您想要使用指针算法的情况下。