代码之家  ›  专栏  ›  技术社区  ›  jjmcc

如何正确地从C++中返回不可修改的对象引用?

  •  1
  • jjmcc  · 技术社区  · 7 年前

    我试图从一个函数返回一个const对象,以便从中获取信息,但一旦创建了它,就无法更改任何内容。我有以下代码

        Sprite const& GetSprite() const {
            return *m_sprite;
        }
    
    
        std::unique_ptr<Sprite> m_sprite;
        int test = 5;
    

    在代码的其他地方我称之为 GetSprite 作用

    Sprite sprite = entity->GetSprite();
    sprite.test = 6;
    

    这似乎可以很好地编译,并且在遍历 test 事实上是改变了。我会假设该对象是从 GetSprite

    我是做错了还是有不同的方法来实现这一点?

    1 回复  |  直到 7 年前
        1
  •  6
  •   Yakk - Adam Nevraumont    7 年前
    Sprite sprite = entity->GetSprite();
    

    这将创建 Sprite GetSprite

    (传说中的)精灵 错误,或者您会混淆引用、值和指针语义。

    Sprite const& sprite = entity->GetSprite();
    

    这将获取对包含的 (传说中的)精灵 您不能通过它来修改它。

    如果要阻止对的复制 s、 你可以做:

    Sprite(Sprite const&) = delete;
    

    但我建议允许你搬家 (传说中的)精灵 s:

    Sprite(Sprite&&) = default;
    

    特别是在-