У меня проблема с перегрузкой оператора [] для чтения и записи в моих объектах.Это большой код с различными компонентами, и я не собираюсь помещать здесь все детали, так как это не поможет.В двух словах, у меня есть следующее
class MyObject(){
inline SetterProxy& operator[](int i) {
SetterProxy a(i);
return a;
}
inline double operator[](int i) const{
return some_value;
}
}
Первый перегруженный [] прекрасно работает для присвоения значений (если вам интересно, что такое SetterProxy, я должен использовать прокси-классы, чтобы иметь возможность делать некоторыепроверка и внутренние вызовы функций перед присвоением значений).Однако второй, который должен быть вызван при чтении, не работает и код вылетает.Я не уверен, что здесь происходит, но когда я закомментирую первый, он просто отлично работает!Может ли быть так, что компилятор каким-то образом путает эти два, поскольку они оба встроены?
Любая мысль будет оценена.
РЕДАКТИРОВАТЬ: Хорошо, вот сам SetterProxy:
class SetterProxy{
private:
Vec v;
int i;
double *ptr_val;
public:
inline SetterProxy(Vec v_, int i_) {
v = v_;
i = i_;
VecGetArray(v,&ptr_val);
}
inline ~SetterProxy(){
VecRestoreArray(v,&ptr_val);
}
inline void operator=(double rhs ){
ptr_val[i] = rhs;
}
};
Хотя я не думаю, что это происходит от этого.Кроме того, изначально мне нужно было вернуть по значению, и я, хотя изменение его на ссылку было бы более эффективным.Я думаю, что это должно быть безопасно, поскольку присваивание выполняется в классе Proxy operator = () и после этого прокси-класс выходит из области видимости.В любом случае, это не спасает мою проблему!