在类中存储引用

Storing a reference within class

本文关键字:引用 存储      更新时间:2023-10-16

我试图在我的类中保留对不同类的指针的引用。我正在尝试查看是否有办法做到这一点,而无需在 ctor 中定义它。我无法复制,因为我正在使用返回的特定指针来执行其他操作。

class MyClass {
private:
    OtherClassPtr &m_ptr_ref;
public:
    MyClass();
public:
    void MyFunction() {
      m_ptr_ref = otherClassPtr->GetPtrRef();
      if(!m_ptr_ref)
        return;
    }
};

引用需要在声明点初始化,并且不能在其生存期内更改为引用其他对象。因此,您需要在构造函数中设置它。

另一种方法是存储指针。我认为引用是语法更好的指针,尽管不同的语法赋予了它不同的语义含义;它的行为类似于它引用的对象,因此具有与该对象相同的值和地址。与您的问题最相关的是,赋值运算符的工作方式类似于对象的赋值,而不是指针。这就是它不能改变指称的原因。

您可以保留指向指针的指针:

OtherClassPtr* m_ptr_ref;
/* ... */
m_ptr_ref = &otherClassPtr->GetPtrRef();

另一种方法是使用 std::reference_wrapper ,但这只不过是一个花哨的指针,我认为使用指针没有优势。