我正在处理一个类,尝试使用常量引用成员来引用其他成员变量,以便提供对这些成员的公共常量访问。是否有一种合法的方法来实现这样的效果?
代码可以编译,但是会给出关于将引用成员绑定到临时值的警告。在调用 resize()
后,A
仍然指向 null,虽然 myA
被更新了。
以下是我尝试做的事情的重现。我认为自引用部分是非法的并导致了问题,但我不确定。非常感谢您的任何建议。
class MyClass{
private:
int mySize;
double * myA;
void resize(int inSize) {
mySize = inSize;
delete [] myA;
// detection for non-positive size is not included for brevity
myA = new double [size];
}
public:
const int & size;
const double * const & A;
MyClass():
mySize(0) , myA(nullptr)
size(mySize), A(myA) {}
// dtor is not included
};
int main(){
MyClass myObj;
myObj.resize(42);
// myObj.A[1] = 0.5 // seg fault
}
编辑: Michael 指出这个问题与 A
的 const
限定符有关,我通过更改 A
的限定符来确认了这一点,结果如下:
double * &A
-> A
正确地绑定到 myA
。
double * const &A
-> A
正确地绑定到 myA
。
const double * &A
-> 不兼容。编译器错误。
const double * const &A
-> A
绑定到临时变量。
编辑: 看起来更好的做法是使用一个 getter 函数。
mySize
/myA
的值...? - Yifan Laisize
在初始化列表中设置。 - Yifan LaimyA
所必需的。 - user4581301