【发布时间】:2013-02-09 08:25:09
【问题描述】:
当没有对引用进行编译时类型检查时,为什么要使用引用而不是指针?
假设您正在创建一个Person 类型的对象,该对象需要保存指向其House 的引用/指针(非常随机) - 因此人员对象会将房屋引用/指针保存为数据成员。想象一下这是通过引用完成的:
class Person{
public:
Person(House& myHouse) : house(myHouse) { }
private:
House& house;
};
我看到的问题是,如果您忘记在数据成员声明中包含 & ,那么您认为是引用的东西就会变成副本。传递并保存指针肯定会更安全,以便在编译时标记此错误?
我并不是要使用其中一个或另一个 - 我在问为什么要使用引用而不是指针来保存数据成员?
【问题讨论】:
-
该代码不合法。成员引用未在构造初始化器列表中初始化。
-
您附加的 sn-p 不是有效的 C++ 代码。 必须使用现有对象初始化引用。
-
如何传递指针比现在更安全?事实上,如果您的成员是指针,编译器不会捕获您在您编辑之前展示的问题(未能在初始化器列表中初始化您的引用) .
-
“我看到的问题是,如果你忘记在数据成员声明中包含 & ,那么你认为是引用的东西就会变成副本” - 如果你“忘记“那么您可能是初学者,这对您来说将是一次学习经历。我的意思是,它可能发生在一个更有经验的开发者身上,但我不记得上次我“忘记”引用参考是什么时候了。
-
@Frammo 然后你今天学到了一些东西,并且感谢 SO。 ;)
标签: c++ pointers reference pass-by-reference