【问题标题】:Correct way to pass reference as argument into a class将引用作为参数传递给类的正确方法
【发布时间】:2019-09-02 16:13:06
【问题描述】:

我试图保持对类中另一个对象的引用,所以我使用指针作为成员。传递参考的最佳方式是什么,它们之间有什么区别。

class Sprite
{
public:
    Sprite();
    void SetTexture(Texture * const& texture);
    void SetTexture(Texture & texture);
private:
    Texture *m_texture;
};

void SetTexture(Texture * const& texture) 或 void SetTexture(纹理和纹理)?

我不想更改 Sprite 类中的纹理,这就是我尝试使用 const 的原因。

【问题讨论】:

    标签: c++ class object pointers reference


    【解决方案1】:

    1) 要回答您的问题,如果要将指针保留在调用者堆栈之外,则应使用指针。 IE,如果 Sprite 类是在调用函数或类中创建的,那么您可以(并且应该)使用引用。

    2) 如果你要使用指针和 const 指针,你也应该将你的成员变量设为 const。

    【讨论】:

    • 纹理是在类之外创建的,我只是想在 Sprite 类中使用它而没有副本。我通常使用 void (Texture & texture){m_texture = &texture};只是想知道我是否做得对。
    • 引用的好处是,如果你不正确地做,编译器会骂你。所以这些天来一般最好的建议是一直使用它们,直到编译器说你不能。 (这是一个非常广泛的规则,但更经常是正确的)
    【解决方案2】:

    当然不是void SetTexture(Texture* const&);
    虽然它有效,但通过引用常量传递小的琐碎类型(如指针)是毫无意义的悲观。

    void SetTexture(Texture&); 在必须有纹理时才有意义。如果纹理是可选的,void SetTexture(Texture*) 会更合适。

    当然,如果接收者从不修改纹理,那应该通过标记Texture const 来反映在签名和成员中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 2020-05-23
      • 2020-07-07
      • 2016-12-31
      • 2018-12-11
      • 1970-01-01
      • 2013-01-28
      相关资源
      最近更新 更多