给定“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
它指的是,但您不能重新分配或重新分配a
在B
期间的一生。 -
a
绝不能是0
.
因此:
- 该对象不可分配。
-
B
不应该是复制构造的,除非你教A
及其子类型以正确克隆。 -
B
如果存储为值,将不是作为集合类型元素的良好候选者。B
的 vector s 可能最容易实现为std::vector<B*>
,这可能会带来更多的复杂性(或简化,具体取决于您的设计)。
根据您的需要,这些可能是好东西。
注意事项:
- 切片是另一个需要注意的问题if
a
是可分配的,分配可在B
内到达.
关于c++ - 使用引用而不是指针有哪些缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8071022/