Qt中为什么函数可以直接返回QImage/QString对象,而不是QImage* QString*(指针)
副标题:C++编程中使用List<Object*>还是List<Object>呢 ?
注:本文涉及到的主要知识点为:C++的拷贝构造函数的作用
一、在C++中返回参数的基础知识
在C++中,函数返回类型有,基本数据类型,结构体,对象,指针。下面举例几个正确使用C++中函数返回值的使用方法:
- 返回c++基本类型
int max(int a, int b) {
return a > b ? a : b;
} - 返回指针:返回的指针所指的对象必须是用new生成的。
优点:返回指针,加快了参数传递速度
缺点:new需要花费不少时间
优点:在单实例模式需要使用这个方式
Apple *GetAnApple() {
Apple *apple*= new Apple();
return apple;
} - 返回对象:直接返回对象,在return的时候会调用类的拷贝构造函数,给返回值赋值,然后函数内的局部变量就会被销毁。
缺点:1.返回前还要调用类的拷贝构造函数新建并复制全部成员变量。计算压力增大。
缺点:2.在类的成员变量中包含静态成员或指针成员的时候需要自己实现拷贝函数,默认的拷贝构造函数会导致错误;参考: