繁体   English   中英

作为类成员的常量引用

[英]Constant reference as a class member

可以说我有以下课程:

class BigClass
{
public:
    BigClass();
    ~BigClass();

private:
    ... // many variables
};

而另一课:

class SmallClass
{
public:
    SmallClass();
    ~SmallClass();

private:
    const BigClass &ref;
};

请注意,我有一个名为refBigClass对象的ref

  • 这是一个很好的设计吗? 有没有更好的方法呢?
  • 当实际的BigClass对象超出范围时会发生什么? 它会被删除还是因为ref引用而保持活着? 如果它被删除,那么保持活着的一个好方法是使用shared_ptr而不是引用?

这是一个很好的设计吗? 有没有更好的方法呢?

如果SmallClass保证比BigClass更短的生命周期,那么它是完全没问题的。 这种事情经常出现在用作“仿函数”的小类中。

否则使用智能指针:唯一或共享。 或弱共享。

当实际的BigClass对象超出范围时会发生什么?

如果SmallClass仍然存在且具有引用,则它现在是无效引用,并且您的程序将具有未定义的行为。 那很糟。 它可能不会崩溃,但使用引用将写入另一个对象或破坏堆的空闲内存跟踪,或覆盖堆栈值,包括可能的函数返回地址。

它会被删除还是因为参考引用而保持活着?

这不是Java。 它将被删除。 如果您需要跟踪引用计数,那么您需要一个共享的智能指针。

如果它被删除,那么保持活着的一个好方法是使用shared_ptr而不是引用?

是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM