c – 我应该更喜欢成员数据中的指针或引用吗?

这是一个简单的例子来说明这个问题:

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,并将对象作为参考传递。

我通常只使用指针在成员数据中,当指针可以为null或可能改变。还有任何其他原因喜欢指针超过数据成员的引用吗?

是否真的说,包含引用的对象不应该是可分配的,因为引用不应该在初始化后更改?

避免引用成员,因为它们限制类的实现可以做什么(包括,正如你所提到的,阻止赋值运算符的实现),并且对类可以提供什么没有好处。

示例问题:

>你不得不在每个构造函数的初始化列表中初始化引用:没有办法把这个初始化分解成另一个函数(直到C 0x,反正编辑:C现在有delegating constructors)
>引用不能被反弹或为null。这可能是一个优点,但如果代码需要更改以允许重新绑定或成员为null,则成员的所有使用都需要更改
>不像指针成员,引用不能轻易地被智能指针或迭代器替代,因为重构可能需要

http://stackoverflow.com/questions/892133/should-i-prefer-pointers-or-references-in-member-data

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 我应该更喜欢成员数据中的指针或引用吗?