0

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

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

private:
    Window window;
};

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

让我感到沮丧的是,在 Java 中,new 关键字清楚地表明了创建对象的时间和地点,而在 cpp 中则不太清楚,而且我对 C 的经验使事情变得更糟。

谢谢,-科迪

4

2 回答 2

6

除非并且直到您明确声明要返回引用,否则它将返回一个副本。请注意,至少在 C++ 中返回指针不是一个好主意

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

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

private:
    Window window;
};

请注意,如果您担心返回值的开销,您可以放心,所有最新的编译器都会在某种程度上做到这一点return value optimization。此外,如果您使用 C++11,您还可以利用移动语义。

于 2013-01-09T09:27:54.683 回答
2

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

如果您需要返回您的成员本身(这是一个坏主意),那么您需要返回一个参考:

 Window& getWindow() 
      ^^^ 
于 2013-01-09T09:27:13.400 回答