我正在尝试学习C ++并且有一个关于在C ++中返回数组的问题。我知道在这种情况下,也许Vector可能更好,并且不需要getter方法,因为字段在同一个类中是可见的,但我正在尝试学习内存管理,所以我将使用它们。
class Color {
double r;
double g;
double b;
public:
Color(int a, int aa, int aaa) {
r = a;
g = aa;
b = aaa;
}
bool operator==(const Color &other) {
double *otherCol = other.getter();
return otherCol[0] == r && otherCol[1] == g && otherCol[2] == b;
}
double* getter() const {
double second[3] = {r,g,b};
return second;
}
};
int main() {
Color col1(23, 54, 200);
Color col2(23, 54, 200);
cout << (col1 == col2) << endl;
return 0;
}
如果RGB颜色相同,此代码应打印出1,否则为0。但它没有打印1.要进行调试,我在operator==
中的return语句之前添加了以下行(两次故意):
cout << otherCol[0] << " " << otherCol[1] << " " << otherCol[2] << endl;
cout << otherCol[0] << " " << otherCol[1] << " " << otherCol[2] << endl;
奇怪的是,结果不同:
23 54 200
6.91368e-310 6.91368e-310 3.11046e-317
有人可以告诉我是什么导致这种情况以及什么是不依赖于Vector或动态分配内存的合理补救措施?我们假设我们不想将数组传入getter()
进行更新。
答案 0 :(得分:1)
在getter
中,您将返回一个局部变量的地址,这会导致未定义的行为,因此您将获得随机内存。如果你返回一个指针,你必须在调用函数中执行new
变量,并在函数返回后执行delete
。
或者你可以让second
成为一个类成员,使其不会超出范围。
您也可以将数组作为参数传递。