Там нет утечки.В общем случае вы не можете утечь память, если у вас нет new
памяти.Но вы возвращаете адрес локальной переменной, что приводит к неопределенному поведению.
Решение 1: Вы можете использовать статический double [2] в операторе dPtr ():
Решение 2 (лучше): Храните x и y в двойном [2] в вашем классе и вместо этого возвращайте указатель на него:
#include <iostream>
class Vector2
{
private:
double coords_[2];
public:
Vector2(double x, double y)
{
coords_[0] = x;
coords_[1] = y;
}
Vector2(double coords[2])
{
coords_[0] = coords[0];
coords_[1] = coords[1];
}
typedef const double* const dArr;
operator dArr() const
{
return coords_;
}
};
int main()
{
double ids[2] = {2.3 ,3.3};
Vector2 v = ids;
std::cout << 5 << std::endl;
double vect[2] = {v[0], v[1]};
const double * const v2 = v;
std::cout << vect[0] << " " << vect[1] << std::endl;
while(1) { }
return 0;
}
Я добавил const вперед double *
, поскольку это то, на что вы указываете, это const.(Если вы не хотите, чтобы пользователь вашего класса возился с вашими личными членами.)