I have this code of overloaded operator for vectors class, which is a class of vector of dimension 3:
class Vectors
    {
    //private:
    //    double* vector;
    public:
        double* vector;
        Vectors(double*);
        Vectors();
        Vectors(const Vectors&);
        ~Vectors();
        void print_vector();
    };
Class Methods: Constructors:
Vectors::Vectors(double* value)
{
    this->vector = new double[3];
    for (auto i = 0; i < 3; i++)
    {
        this->vector[i] = value[i];
    }
}
Vectors::Vectors()
{
    this->vector = new double[3];
    for (auto i = 0; i < 3; i++)
    {
        this->vector[i] = 0.0;
    }
}
Copy Constructors:
Vectors::Vectors(const Vectors& copy)
{
    this->vector = new double[3];
    for (auto i = 0; i < 3; i++)
    {
        this->vector[i] = copy.vector[i];
    }
}
Destructor:
Vectors::~Vectors()
{
    //cout << "desctructor called \n";
    delete[] vector;
}
void Vectors::print_vector(){
    for (int i=0; i<3 ;i++){
        cout << this->vector[i];
        cout << '\t';
    }
    cout << endl;
}
Overloaded Operator:
Vectors operator+(const Vectors& obj1,const Vectors& obj2)
{
    Vectors *res = new Vectors;
    for (int i = 0; i < 3; i++){
        //cout << obj1.vector[i] << '\t' << obj2.vector[i] << '\t' << obj1.vector[i] + obj2.vector[i] << endl;
        res->vector[i] = obj1.vector[i] + obj2.vector[i];
        //cout << res->vector[i] << endl;
    }
    //res->print_vector();
    return *res;
}
int main()
{
    double a[3] = {3.5,4.10,5.30};
    double b[3] = {7.0,8.0,9.0};
    Vectors* A = new Vectors(a);
    Vectors* B = new Vectors(b);
    Vectors* C = new Vectors();
    *C = *A+*B; // This does not work
    (*A+*B).print_vector(); // This works
    C->print_vector();
    Vectors D = *A+*B; // This works
    D.print_vector();
}
When creating a pointer to an object Vectors, I get different results when compared to creating direct objects.
Output is: 1st Output: 0 4.68558e-310 14.3 2nd Output: 10.5 12.1 14.3 3rd Output: 10.5 12.1 14.3
