В заявлении на печать нет ничего плохого.Фактическая проблема возникает из-за того, как вы определили функцию SetPoint
.
r2.SetPoint({ 6.0f, 1.0f });
Когда вы сделаете это, будет вызвана следующая функция.
void Rectangle::SetPoint(Point2D _point)
{
this->point = &_point;
}
Обратите внимание, что этопередано значение .Если вы внимательно посмотрите, вы узнаете, что это приведет к неопределенному поведению.Зачем?Учтите это:
void Rectangle::SetPoint(Point2D _point)
{
this->point = &_point; // this->point points to _point object.
} // _point dies here. So, accessing this->point will lead to UB.
Предложения :
1) Деструкторы не должны вызываться явно.Вы сделали это в main.cpp.Как только объект выходит из области видимости, деструктор вызывается автоматически.
2) Ваш код имеет утечку памяти.
Point2D* point = new Point2D;
Dimensions* dimensions = new Dimensions;
Если я вызываю SetPoint()
и SetDimensions()
, указатель надинамически выделенная память будет потеряна.
3) Определите геттеры как const
функции.
4) Избегайте мелкого копирования в вашем сценарии.Это создаст проблемы, которые будет сложнее отследить.