拷贝构造 - AntonioLMH/C-Tutorial GitHub Wiki

Currency p = bucks;//这是initialization p = bucks;//这是assignment

C++初始化的时候用howMany h(10);和howMany h =10;是等价的。

如果构造函数的参数是自己同类型的const reference,就可以用另外一个同类对象初始化,这叫做拷贝构造; T::T(const T&); 如果没有给,C++会自动给一个。 是成员变量对成员变量的拷贝。

库 size_t strlen(const char* s);和 char *strcpy(char *dest, const char *src);

eg. Person(const Person& w);

Person::Person(const Person& w){ name = new char[::strlen(w.name)+1]; ::strcpy(name,w.name); }

如果调用一个函数时,他说是他的参数是一个对象本身,则是拷贝构造。

1.call by value: eg。void roster(Person); Person child("Ruby"); roster(child);//call function(拷贝构造) 2.初始化: eg. Person baby_a("Fred"); //copy ctor Person baby_b = baby_a;//拷贝构造 Person baby_c(baby_a);//拷贝构造

3.函数返回一个对象

编译器可能会把不必要的copy优化: eg. Person copy_func(char *who){ Person local(who); local.print(); return local;//copy actor called! }

Person nocopy_func(char *who){ return Person(who); }//no copy needed!

任何对象只能被初始化一次,其他都为assignment。

如果name是系统类库里的类型,如string类型的,则不需要写拷贝构造。

string类拷贝,直接相等,不用strcpy。(尽量用string)。

系统的拷贝构造不会malloc,所以调用析构会有问题。

总结: 1.写了一个类: 需要三个函数:1.defalut constructer,2.virtual destructer 3.拷贝构造函数

如果不希望被拷贝,则声明一个private copy ctor。

⚠️ **GitHub.com Fallback** ⚠️