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

标签 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;
}

为了进一步正确“B”省略了额外的代码,例如复制构造函数和赋值运算符,只是想演示问题的概念。

最佳答案

直接的限制是:

  • 您不能更改引用的值。您可以更改 A它指的是,但您不能重新分配或重新分配 aB期间的一生。
  • a绝不能是 0 .

因此:

  • 该对象不可分配。
  • B不应该是复制构造的,除非你教A及其子类型以正确克隆。
  • B如果存储为值,将不是作为集合类型元素的良好候选者。 B 的 vector s 可能最容易实现为 std::vector<B*> ,这可能会带来更多的复杂性(或简化,具体取决于您的设计)。

根据您的需要,这些可能是好东西。

注意事项:

  • 切片是另一个需要注意的问题if a是可分配的,分配可在 B 内到达.

关于c++ - 使用引用而不是指针有哪些缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8071022/

相关文章:

java - 重置计数器或让它增加并使用模数是否更有效

jquery - 如何覆盖 jQuery UI 小部件样式并保留功能

python - if __name__ == '__main__' 的风格指南是什么?

c++ - 使用 lambda 的线程构建 block (TBB) 排队任务

c++ - 混合 C 和 C++ 代码的静态分析怪异符号行为

c# - 旧的注释代码和代码中的大量空格会降低性能吗?

c - 警告 : initialization makes pointer from integer without a cast

c++ - 如何在多行上编写 QString?

c# - C sharp "public IntPtr pHandle = IntPtr.Zero;"相当于 Delphi "hp: Pointer"

c++ - QList 元素的段错误