W tym fragmencie kodu, który konstruktor jest faktycznie wywoływany?Który konstruktor jest tutaj wywoływany?
Vector v = getVector();
wektor ma konstruktor kopiujący, domyślnego konstruktora i operatora przypisania:
class Vector {
public:
...
Vector();
Vector(const Vector& other);
Vector& operator=(const Vector& other);
};
getVector zwrotu przez wartość.
Vector getVector();
Kod wykorzystuje standard C++ 03.
Fragment kodu wygląda tak, jakby miał wywołać konstruktor domyślny, a następnie operator przypisania, ale podejrzewam, że ta deklaracja jest inną formą korzystania z konstruktora kopiowania. Który jest poprawny?
Jedna zasada nie mająca żadnej wartości jest taka, że konstruktor kopii musi być dostępny (np. Publiczny), nawet jeśli sama konstrukcja kopii zostanie wyeliminowana. Możliwe, że konstruktor kopiowania będzie prywatny, kod nie skompiluje się, a upublicznienie go skompiluje, ale konstruktor kopiowania nie zostanie wywołany. – 6502
"ten sam obiekt fizyczny, który zostanie zapisany w v" - raczej obiekt utworzony wewnątrz funkcji jest tym samym obiektem fizycznym co 'v'. Normalnie powiedziałbym, że 'v' jest nazwą obiektu, lub' v' jest tym obiektem, ale nie "obiekt jest przechowywany w' v ". Zwykle implementacja tej metody kopiowania polega na tym, że wywołujący 'getVector' przekazuje wskaźnik jako dodatkowy ukryty parametr, a' getVector' konstruuje jego wartość zwracaną pod tym adresem. W takim przypadku standard zezwala, aby kod wywołujący przekazał '& v' jako ukryty parametr. –