我正在尝试保持对我班级中不同班级的指针的引用。我试图看看是否有办法做到这一点,而无需在ctor中定义它。我无法复制,因为我正在使用返回的特定指针做其他事情。
class MyClass {
private:
OtherClassPtr &m_ptr_ref;
public:
MyClass();
public:
void MyFunction() {
m_ptr_ref = otherClassPtr->GetPtrRef();
if(!m_ptr_ref)
return;
}
};
答案 0 :(得分:1)
引用需要在声明时初始化,并且不能更改为在其生命周期内引用其他对象。因此,您需要在构造函数中设置它。
另一种方法是存储指针。我认为引用是一个具有更好语法的指针,尽管不同的语法赋予它不同的语义含义;它的作用类似于它引用的对象,因此具有与该对象相同的值和相同的地址。与您的问题最相关的是,赋值运算符的作用类似于对象的赋值,而不是指针。这就是它无法改变指示物的原因。
您可以保留指向指针的指针:
OtherClassPtr* m_ptr_ref;
/* ... */
m_ptr_ref = &otherClassPtr->GetPtrRef();
另一种方法是使用std::reference_wrapper
,但这只不过是一个花哨的指针,而且我没有看到使用指针的优势。