这是一个简化的例子来说明这个问题:
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,并将对象作为引用传递。
当指针可能为空或可能更改时,我通常只会在成员数据中使用指针。是否有任何其他理由更喜欢指针而不是数据成员的引用?
是否可以说包含引用的对象不应该是可分配的,因为引用一旦初始化就不应更改?