[英]Constant reference as a class member
可以说我有以下课程:
class BigClass
{
public:
BigClass();
~BigClass();
private:
... // many variables
};
而另一课:
class SmallClass
{
public:
SmallClass();
~SmallClass();
private:
const BigClass &ref;
};
请注意,我有一个名为ref
的BigClass
对象的ref
。
BigClass
对象超出范围时会发生什么? 它会被删除还是因为ref
引用而保持活着? 如果它被删除,那么保持活着的一个好方法是使用shared_ptr
而不是引用? 这是一个很好的设计吗? 有没有更好的方法呢?
如果SmallClass保证比BigClass更短的生命周期,那么它是完全没问题的。 这种事情经常出现在用作“仿函数”的小类中。
否则使用智能指针:唯一或共享。 或弱共享。
当实际的BigClass对象超出范围时会发生什么?
如果SmallClass仍然存在且具有引用,则它现在是无效引用,并且您的程序将具有未定义的行为。 那很糟。 它可能不会崩溃,但使用引用将写入另一个对象或破坏堆的空闲内存跟踪,或覆盖堆栈值,包括可能的函数返回地址。
它会被删除还是因为参考引用而保持活着?
这不是Java。 它将被删除。 如果您需要跟踪引用计数,那么您需要一个共享的智能指针。
如果它被删除,那么保持活着的一个好方法是使用shared_ptr而不是引用?
是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.