★ 编译器自动生成的构造仅仅做让编译能通过的事情,它不会初始化成员变量。
★ 编译器并不会自动生成缺省的构造函数和拷贝构造函数,仅仅在它需要的时候。
没错!对于下面的类:
class Test {
int n;
};
编译器不会自动生成构造函数,因为没有字段需要初始化。
★ 很多时候都需要深拷贝,这时需要自己定义copy constructor和重载operator=。
★ 如果只需要浅拷贝,就不用定义copy constructor并逐一赋值,因为编译器自动生成的memcpy和memset更有效率。
★ 返回一个局部对象会导致两次拷贝构造:
T f() {
T t;
return t;
}
★ 全局和静态对象会在使用前自动初始化,所有字段置0。