1

我读过 C++ 中的默认行为始终是复制。所以我猜测数据成员上的 get 函数也会返回数据成员的副本。

通常这可以正常工作,但在这种情况下,我的一个数据成员是一个多图。这就是我现在所拥有的:

class Track {
private:
    multimap<long, Note> noteList;
public:

    multimap<long ,Note> getNoteList()
    {
        return noteList;
    }
}

但由于某种原因,这不起作用。当我打电话时getNoteList(),我没有收到任何错误,但控制台中的程序输出停止(当我运行我的应用程序时)。如果我noteList公开一切正常。

与 multimap 相比,int、char、float 等常规类型有什么区别吗?为什么这不起作用的任何原因我如何编写一个有效的getter函数?

4

1 回答 1

2

返回容器的副本可能不是一个好主意。您很可能最终会无故复制太多。如果您不希望用户能够更改您现有的容器,您应该通过引用返回它const

class Track {
private:
    multimap<long, Note> noteList;
public:

    multimap<long ,Note> const& getNoteList() const
    {
        return noteList;
    }
}

现在,当这个类的客户端调用时getNodeList(),可以直接访问noteListmap,而不需要做昂贵的副本。

如果您还想让客户端能够直接修改该映射,您可以添加一个返回常规引用的重载:

    multimap<long ,Note>& getNoteList()
    {
        return noteList;
    }

但是,如果您达到这一点,您可能应该问自己为什么不noteList直接曝光。

于 2012-04-22T23:42:25.937 回答