我不知道模式的实际名称
我通常不会编写c ++代码,但每次阅读时我都会反复看到相同的模式。
我刚刚在虚幻引擎4中找到它,看起来像这样
FVector CameraLoc;
FRotator CameraRot;
GetActorEyesViewPoint(CameraLoc, CameraRot);
我总是讨厌这种模式,因为我从来不知道哪个参数被更改,然后有时函数会期望对象被正确初始化。
为什么这种模式甚至被使用?将它包装在结构中会不会更好?
struct ActorEyesViewPoint {
FVector CameraLoc;
FRotator CameraRot;
};
和
ActorEyesViewPoint GetActorEyesViewPoint();
答案 0 :(得分:4)
此模式用于防止从函数返回时不必要的对象副本。这基本上是RVOs的显式版本(http://en.wikipedia.org/wiki/Return_value_optimization)
请注意,C ++ 11移动语义
不再需要这样做答案 1 :(得分:1)
该模式的一个优点是您可以将派生类传递给采用基类的函数。
如果你有
class A { };
class B : public A { };
void foo(A* a);
A bar();
并且需要类B
的对象,foo
很有用,但bar
不是。