WRT代码,Abc& Xyz是2个班级。
我在DoOperation(Xyz& temp)中得到一个引用,并希望将它分配给类数据成员即mem1,以便其他成员函数lile DOOperation_2(),DOOperation_3()等可以使用此引用。 / p>
我知道我们不能在没有初始化的情况下在C ++中声明引用。但是我如何在C ++中处理这样的场景呢?
executor.execute(runnable);
答案 0 :(得分:1)
很简单:使用指针。与引用不同,指针是可分配的。
class Abc
{
public:
Xyz* mem1;
void DoOperation(Xyz& temp)
{
mem1 = &temp;
}
};
答案 1 :(得分:1)
正如您所正确指出的,您需要初始化参考。你也无法在初始化后改变引用“指向”的内容。
所以这里的简单解决方案就是使用指针
class Abc {
public:
Xyz* mem1{nullptr};
void DoOperation(Xyz* ptr) {
mem1 = ptr;
}
};
然后你可以在这样的方法中使用mem1
(带有一个很好的assert
)
void Abc::SomeMethod() {
assert(this->mem1);
mem1->something();
}
请注意,引用与T* const
(const指针)非常相似。在这个答案Difference between const. pointer and reference?
如果您绝对必须使用引用,那么您唯一能做的就是在初始化期间初始化构造函数中的引用。
class Abc {
public:
Xyz& mem1;
Abc(Xyz& mem1_in) : mem1{mem1_in} {}
};
答案 2 :(得分:1)
在构造函数中初始化它:
class Abc
{
public:
Xyz& mem1;
Abc (xYZ& temp) : mem1(temp) {}
// ...
};
或使用指针:
class Abc
{
public:
Xyz* mem = nullptr;
void DoOperation(xYZ& temp)
{
mem = &temp;
}
// ...
};
答案 3 :(得分:1)
改为使用指针。
class Abc
{
public:
Xyz* mem1; // pointer
void DoOperation(xYZ& temp)
{
mem1 = &temp; // take the address of the variable and save it to the pointer
}
void DOOperation_2()
{
}
DOOperation_3()
{
}
};