2010-09-01 21 views
0

可能重复:
When pass-by-pointer is preferred to pass-by-reference in C++?
Are there benefits of passing by pointer over passing by reference in C++?
How to pass objects to functions in C++?通过引用v。通过指针 - 优点?

大家好, 我正在开发一个大型的面向对象的C++应用程序框架,作为我的化学工程专业毕业的一部分研究。

我发现我的许多函数都指向自定义对象或STL对象。我发现在编写代码方面,这使得访问存储在其中的函数或变量更加困难。

除了简单性,通过引用传递指针还是有什么优点/缺点吗?

如果一个优于另一个,我可能会考虑重构我的代码以统一使用任何最佳方法。如果没有,我仍然可以重构一致使用通过引用的可读性(即不必取消引用)

再次,我想做出最好的决定,因为我的框架已经40多个文件大,所以我想尽我所能尽早实施统一的结构,并尽可能采用最佳方法。

在此先感谢!

+3

更难?键入' - >'而不是'.'? – Beta 2010-09-01 20:14:20

+1

这是另一种提问方式:“我知道它已被多次询问,但让我再问一次,也许你不会注意到这是一个骗局。”真的:)看到“相关”链接。很多相同的问题。 – 2010-09-01 20:17:03

+1

根据C++的要点,越多的尖括号,代码越好。所以我建议既不要在价值上也不要在参考上加强。但在'boost :: call_traits :: param_type'上。玩得开心 – 2010-09-01 20:21:33

回答

6

主要区别在于引用不能为NULL(至少不是没有一些恶意编程)。对于语法糖,当需要参数时,我会通过参考。如果我有一个参数是可选的情况,我会通过指针传递。

总是有例外。如果它符合现在的风格,或者由于我与它有关的事情,将它作为指针可能会更方便。

+1

+1。就个人而言,我在对象不是可选时使用引用,否则使用指针。这也是我公司正在使用的惯例。 – Shautieh 2010-09-01 20:32:31

+1

+1“至少不是没有一些恶意编程” – phimuemue 2010-09-01 20:42:07

2

优选通过参考。如果没有别的,我这样做,因为参考根本不可能是NULL。它杜绝了这么多愚蠢的错误,辩论,合同检查,内存责任的问题,等等。

+0

当然,引用可以是NULL。以例如'int&f(int * p){return * p; }'和调用'int * x = NULL; int&y = f(x);'。我无法计算我以多种形式看到这个错误的时间。但从语义上讲,我同意。如果你想“谈论某事”而不是“说出你所谈论的事物在哪里”,那么请使用一个参考。 – 2014-06-24 11:51:16

0

如果您的选择是指针与引用,请使用引用。它们具有指针的所有优点,而没有解引用未初始化的指针的危险。

不要太担心早期实现统一的方法 - 在这种情况下,即使代码库很大,在两者之间来回切换也不难(一次一个函数) 。

+0

如果通过解引用未初始化的指针构建引用,仍可以解引用未初始化的指针。 – 2014-06-24 11:49:32

0

就我个人而言,我喜欢通过指针传递,因为它在我的代码中提供了一定程度的一致性。我自动知道我的对象Foo是一个指针。这同样适用于一个参考,所以一定要选择一个并坚持下去。

0

虽然我喜欢引用,有些情况下你不能使用他们几个常见的情况:

  • 要存储在一个成员变量的对象引用/指针,但不希望要求在类的构造函数对象
  • 要存储在一个成员变量的对象引用/指针和在运行时更改实例
  • 你想使一个物体参数可选的方法或函数

在我看来,混合引用和指针是非常难看的,所以我更喜欢指针。