center_pt = *new Point(x/size, y/size);
Утечка памяти. Никто в «си с крестами» за вас не будет подчищать все эти new.
Правильно:
center_pt = Point(x/size, y/size);
(Ну и, разумеется, я не понимаю, что значат эти x/size и y/size, но шут с ним.)
Примерно таким образом и происходит переприсваивание объектов, если им оставили таки операцию =. То есть…
class Geolocator {
public:
Point coords;
bool isReliable;
Geolocator() : coords(0,0), isReliable(false) {}
void getFromSensor() {
coords = Point(100, 100);
isReliable = true;
}
};
Вариант 2. Через указатель, создание и уничтожение. Для простоты не буду это делать «руками», а воспользуюсь указателем единоличного владения unique_ptr.
class Geolocator {
public:
std::unique_ptr<Point> coords;
void getFromSensor() {
Point pt(100, 100);
if (coords) {
*coords = pt;
} else {
coords.reset(new Point(pt));
}
// а если и операции = у Point нет, то можно
// coords.reset(new Point(100, 100));
}
void declareUnreliable() {
coords.reset();
}
};