C ++传递成员字段

时间:2013-01-09 09:26:04

标签: c++ pointers

这是一个愚蠢的简单问题,我正在学习C ++并且有以下课程......

class Client
{
public:
    Window getWindow() { return window; };

private:
    Window window;
};

我想知道的是getWindow()会返回对我的私有window对象或副本的引用吗?我应该在这里使用指针吗?

让我感到害怕的是,在Java中,新关键字使得对象的创建时间和位置非常清晰,在cpp中它不太清楚,而且我对C的体验使事情变得更糟。

谢谢,-Cody

2 个答案:

答案 0 :(得分:6)

除非您明确声明返回引用,否则它将返回副本。请注意,至少在c ++

中返回指针不是一个好主意

要返回引用,您必须将&添加到返回类型

class Client
{
public:
    Window& getWindow() { return window; };

private:
    Window window;
};

<击> 请注意,如果您担心返回值的开销,可以确保所有最新的编译器都在某种程度上return value optimization。 此外,如果您使用的是C ++ 11,您还可以利用移动语义。

答案 1 :(得分:2)

默认情况下,C和C ++按值返回 它会返回您的成员的副本。一个好的编译器可能会优化使用N / RVO复制构造函数的额外调用。

如果您需要自己退回会员(这是一个坏主意),那么您需要返回一个参考:

 Window& getWindow() 
      ^^^