使用引用而不是指针有哪些缺点?

Jad*_*aMD 6 c++ pointers coding-style reference

鉴于"A"类存在且是正确的.使用"A"引用而不是类"B"中的指针会产生什么负面结果.那是:

// In Declaration File
class A;

class B
{
public:
   B();
   ~B();
private:
    A& a;
};

// In Definition File
B::B(): a(* new A())
{}

B::~B()
{
    delete &a;
}
Run Code Online (Sandbox Code Playgroud)

省略了额外的"B"正确性代码,例如复制构造函数和赋值运算符,只是想展示问题的概念.

jus*_*tin 4

直接的限制是:

  • 您无法更改引用的值。您可以更改Ait 所指的,但不能在的生命周期a内重新分配或重新分配。B
  • a决不能是0

因此:

  • 该对象不可分配。
  • B不应该是可复制构造的,除非您教导A及其子类型正确克隆。
  • B如果存储为值,则不会成为集合类型元素的良好候选者。s的向量B可能最容易实现为std::vector<B*>,这可能会引入进一步的复杂性(或简化,取决于您的设计)。

这些可能是好事,具体取决于您的需求。

注意事项:

  • 切片是另一个需要注意的问题,如果它 a是可分配的并且分配可以在B.