对象型参数和返回值
使用对象类型作为函数的参数或者返回值,可能会产生一些中间对象
- 尽量不要使用对象作为参数,使用引用来访问外部对象的内容
void test1(Car &car) {}
Car test2() {
Car car;
return car;
}
int main() {
Car car2;
car2 = test2(); //这里函数调用完以后马上就销毁,如果不生成一个中间对象的话,无法赋值给car2
}
匿名对象(临时对象)
- 匿名对象:没有变量名、没有被指针指向的对象,用完后马上调用析构
class Car {
public:
Car() { ...}
...
}
int main() {
Car(); //这就是匿名对象,没有名字,用完就不要了
}
隐式构造
- C++中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数
Person p1 = 20; //相当于 Person p1(20);
Person p1;
p1 = 40; //相当于 p1 = Person(40);
class Person {
public:
explicit Person(int age) :m_age(age) {
cout << "Person(int) - " << this << endl;
}
...
}
编译器自动生成的构造函数
- C++编译器在某些特定情况下,会给类自动生成无参的构造函数
** 成员变量在声明的同时初始化
** 有虚函数就会
** 虚继承其他类
** 包含了对象类型的成员,且这个成员有构造函数(编译器生成或自定义)