При переназначении переменной деструктор не вызывается .. (C ++)

Когда переменная переназначается, деструктор не вызывается:

Object foo = Object(a,b);
foo = Object(c,d);

поэтому деструктор будет вызывается только в конце области действия для Object (c, d), что, очевидно, может вызвать проблемы. В данном конкретном случае меня это не слишком беспокоит: достаточно объявить 2 разных объекта:

Object foo1 = Object(a,b);
Object foo2 = Object(c,d);

Таким образом, деструктор обоих объектов будет вызываться в конце.

Однако есть случай, когда мне обязательно нужно переназначить переменную, то есть в конструкторе объекта, например:

SuperObject(Point point1, Point point2) : delay_object_(DelayObject(0)) {
  double distance = distance(point1, point2);
  double delay = distance / speed;

  delay_object_ = DelayObject(delay);
}

На самом деле параметр DelayObject нелегко вычислить (в этом примере я также пропустил несколько других пассажей), и я хочу избежать его в списке инициализации.

Я думал, что могу принудительно удалить объект, поместив объект в кучу и явно вызвав деструктор:

SuperObject(Point point1, Point point2) : p_delay_object_(new DelayObject(0)) {
  double distance = distance(point1, point2);
  double delay = distance / speed;

  delete p_delay_object_;
  p_delay_object_ = new DelayObject(delay);
}

но это действительно выглядит некрасиво, так как я предпочитаю использовать динамическое размещение только тогда, когда строго нужно. Я что-то упустил?

Ура!

9
задан Enzo 4 July 2011 в 19:38
поделиться