这是一个愚蠢的简单问题,我正在学习C ++并且有以下课程......
class Client
{
public:
Window getWindow() { return window; };
private:
Window window;
};
我想知道的是getWindow()
会返回对我的私有window
对象或副本的引用吗?我应该在这里使用指针吗?
让我感到害怕的是,在Java中,新关键字使得对象的创建时间和位置非常清晰,在cpp中它不太清楚,而且我对C的体验使事情变得更糟。
谢谢,-Cody
答案 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()
^^^