Konstruktor, jak sama nazwa wskazuje, konstruuje obiekt, tz. wywoływany jest (tylko i wyłącznie) w czasie jego tworzenia. Celem jego jest skopiowanie danych z innego obiektu do siebie. Operatora przypisania używamy już w czasie istnienia obiektu do uczynienia go identycznym (lub prawie) do obiektu po prawej, np.
#include <iostream>
struct Foo {
Foo() = default;
// Konstruktor kopiujący
Foo(const Foo&) {
std::cout << "copy\n";
}
// Operator przypisania
Foo& operator=(const Foo& other) {
// Sprawdzenie czy nie przypisujemy obiektu do samego siebie
if(this != &other) {
std::cout << "assing\n";
}
// Zwrócenie referencji do samego siebie
return *this;
}
};
int main() {
Foo one;
Foo two(one); // Foo(const Foo&)
one = two; // Foo::operator=(const Foo&)
}
O to chodzi? :)