1),参数用引用
void Method(const MyClass& aMyClass)
const MyClass& Method()
{
static MyClass s_MyClass;
...
return s_MyClass;
}
const MyClass& newMyClass = Method();
比这样调用省去了MyClass的constructor的开销:
MyClass newMyClass = Method();
{
static MyClass s_MyClass;
...
return s_MyClass;
}
const MyClass* Method()
{
if()
return p; // p is a pointer which is not NULL
else
return NULL;
}
... // Do something, when pMyClass is NULL;
else
... // Do something, when pMyClass is not NULL;
// Like pMyClass->MyClassMethod();
但如果是传引用,必须确保Method()返回值引用到真实的一个变量,并且这个变量不能是函数内部非static变量,因为函数内部非static变量会因为函数调用结束而销毁。
调用者就不需要做类似指针是空值的检查。
现在看来,好象传引用更方便些。
但是,从另外一个方面讲,返回值传指针,调用者一般用起来不会引起performance问题,意思是:
如果返回值为指针,那么调用者一般会这样调用:
const MyClass* pMyClass = Method();
// Then use pMyClass do something
如果返回值为引用,那么调用者这样调用最好:
const MyClass& myClass = Method();
但是,一般情况下,大家都习惯于这样用:
const MyClass myClass = Method();
这样一用,Peformance就会差一些。
所以从这个角度上讲,好象返回值传指针更好。
但是话又说回来了,即使返回值传指针,调用者也可以这样用:
const MyClass myclass = *(Method());
这样的话,Performance会一样差,因为同样一个新的MyClass对象会构造出来。
所以总结一下,返回值传引用和传指针,不能一概而论,还是要具体情况具体分析。
比如:
class BaseClass
{
};
{
};