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"正确性代码,例如复制构造函数和赋值运算符,只是想展示问题的概念.
直接的限制是:
A
it 所指的,但不能在的生命周期a
内重新分配或重新分配。B
a
决不能是0
。因此:
B
不应该是可复制构造的,除非您教导A
及其子类型正确克隆。B
如果存储为值,则不会成为集合类型元素的良好候选者。s的向量B
可能最容易实现为std::vector<B*>
,这可能会引入进一步的复杂性(或简化,取决于您的设计)。这些可能是好事,具体取决于您的需求。
注意事项:
a
是可分配的并且分配可以在B
.