Victor Parmar
Victor Parmar

Reputation: 5779

c++ implicit copy constructor and the assignment operator

I have a class defined as follows:

#include <iostream>

using namespace std;

class Point
{
    int x, y;

public:

    Point(int a, int b) : x(a), y(b)
    { 
        std::cout << "Constructing point ( " << a << ", " << b << " ) " 
                 << std::endl;
    }

    Point(const Point& p) : x(p.x), y(p.y)
    {
        std::cout << "In copy constructor " << p.x << " " << p.y 
                 << std::endl;
    }

    Point& operator=(const Point& p)
    {
        std::cout << "In assignment operator " << p.x << " " << p.y 
                 << std::endl;
        x = p.x;
        y = p.y;
        return *this;
    }
};

int main()
{
    Point p1 = Point(1, 2); 

    return 0;
}

Now when I execute this all I see is Constructing point (1, 2). I am assuming that the compiler is doing some optimization here. Is it correct that in theory a temporary gets constructed and then the assignment operator is called to initialize p1?

Upvotes: 0

Views: 334

Answers (2)

mik
mik

Reputation: 39

If you want see the operator = called, you must write a code like this:

Point p1(5, 5);
Point p2(0, 0); //You don't have a default constructor.

p2 = p1; // Now operator = is called.

Upvotes: 1

Mark B
Mark B

Reputation: 96233

No, in a declaration like that the = operator actually still means to call a constructor, and the compiler probably elided away any possible copy construction as an optimization. = in a declaration would never result in an assignment being called. So in theory a temporary could be created and copy-constructed into p1.

Upvotes: 2

Related Questions