在的Deitel C++書( 「C++ 11爲程序員」,p.286),存在的一個示例:爲什麼通過引用傳遞涉及拷貝構造函數?
class Date { ... }
class Employee {
public:
Employee(const string &, const string &, const Date &, const Date &);
private:
string firstName;
string lastName;
const Date birthDate;
const Date hireDate;
}
Employee::Employee(const string &first, const string &last,
const Date &dateOfBirth, const Data &dateOfHire)
: firstName(first),
lastName(last),
birthDate(dateOfBirth),
hireDate(dateOfHire) { };
書中說的成員的初始值如birthDate(dateOfBirth)
調用Date
類的拷貝構造。我很困惑爲什麼複製構造函數?我認爲「通過引用傳遞」的要點是爲了避免對象複製?
如果我做的:
Date birth(7,24, 1959);
Date hire(2,12, 1988);
Employer staff("bob", "blue", birth, hire);
多少Date對象不繫統現在有2個或4? (在開始創建二,二是通過拷貝構造函數創建)
因此,確有通過拷貝構造函數的行爲創造了2個新的Date對象,就像性病的新對象:被創建的字符串,我是否理解你正確?thx – Oliver 2012-02-08 21:15:26
在這種情況下,對象實例顯示爲Employee類的成員,並且它們僅僅是_initialized_(通過它們的拷貝構造函數)就位。但從邏輯上說,是的,所有這些成員都被初始化爲它們各自初始化程序**和**的副本,它們剛剛開始生活,並作爲Employee對象的一部分進行分配。 **僱員有一個字符串,字符串,日期,日期**,可以這麼說 – sehe 2012-02-08 21:20:44