Задаю класс - точка в N-мерном пространстве, функции-члены - конструктор, деструктор и сеттер. Также задаю функцию вычисления расстояния между двумя точками Dist. В main'е объявляю 2 точки и вывожу расстояние. Программа работает корректно, но после вывода верного результата зависает. При отсутствии деструктора - все ок. Проблему решило - заменить формальные параметры Dist'a на ссылки, т. е: double Dist(Point& org, Point& dest) вместо double Dist(Point org, Point dest). Но все же до конца не очень понятно, почему не подходит первый вариант.
#include <iostream>
#include <math.h>
using namespace std;
class Point
{
public:
int _dim;
double* _coords;
Point(int N = 3);
~Point();
void Set();
};
Point::Point(int N):
_dim(N)
{
_coords = new double[N];
for(int i = 0; i < N; i++)
_coords[i] = 0;
}
Point::~Point()
{
delete _coords;
_coords = 0;
}
void Point::Set()
{
cout << "Enter coordinates: ";
for(int i = 0; i < _dim; ++i)
cin >> _coords[i];
}
double Dist(Point org, Point dest)
{
double sumOfSq = 0;
for(int i = 0; i < org._dim; i++)
sumOfSq += pow((dest._coords[i] - org._coords[i]), 2);
return sqrt(sumOfSq);
}
int main()
{
Point A, B;
B.Set();
cout << Dist(A, B);
return 0;
}