这是一个简单的例子来说明这个问题:
class A {};
class B
{
B(A& a) : a(a) {}
A& a;
};
class C
{
C() : b(a) {}
A a;
B b;
};
所以B负责更新C的一部分。我通过lint运行代码,它抱怨引用成员:lint#1725。这篇文章谈到了对缺省拷贝和赋值的关注,这是足够公平的,但缺省拷贝和赋值在指针方面也不好,所以这样做没有什么好处。
我总是尽可能地使用引用,因为裸指针引入了不确定的关于谁负责删除该指针的问题。我更喜欢按值嵌入对象,但如果需要指针,我会在拥有指针的类的成员数据中使用auto_ptr,并将对象作为引用传递。
我通常只在成员数据中使用指针,当指针可能为空或可能更改时。对于数据成员来说,有没有其他更喜欢指针而不是引用的原因?
是否可以说包含引用的对象不应该是可赋值的,因为引用一旦初始化就不应该被更改?
发布于 2009-05-21 02:59:09
我自己的经验法则:
当你想让你的对象的生命周期依赖于其他对象的生命周期时,
发布于 2009-05-21 01:53:56
对象很少允许赋值和其他类似比较的东西。如果你考虑一些像“部门”,“雇员”,“总监”这样的对象的商业模型,很难想象一个员工被分配到另一个员工的情况。
因此,对于业务对象来说,将一对一和一对多关系描述为引用而不是指针是非常好的。
也许将一或零关系描述为指针也是可以的。
所以不能‘我们不能赋值’然后因子。
许多程序员只是习惯于使用指针,这就是为什么他们会找到任何参数来避免使用引用。
拥有一个指针作为成员将迫使你或你的团队成员在使用之前一次又一次地检查指针,并带有“以防万一”注释。如果指针可以是零,那么指针可能被用作一种标志,这是不好的,因为每个对象都必须扮演自己的角色。
发布于 2009-05-21 02:00:38
https://stackoverflow.com/questions/892133
复制