将临时对象移到成员函数之外

时间:2018-06-04 04:54:55

标签: c++ c++11 pointers rvalue-reference rvalue

这是我想要创建的内容:

active

这是棘手的部分:

class Theme
{
    public:
        Theme();

        bool isValid() const;

        QString name() const;

    private:
        QString m_name;
};

class ThemeManager
{
    public:
        ThemeManager();
        ~ThemeManager();

        void setCurrentTheme(const Theme& theme);
        const Theme& currentTheme() const;

        const Theme& theme(const QString& name) const;

    private:
        Theme& m_currentTheme;
        QSet<Theme> m_availableThemes;
};

这就是我想要实现的目标:

const Theme& ThemeManager::theme(const QString& name) const
{
    for (const Theme& theme : m_availableThemes)
    {
        if (name == theme.name())
        {
            return theme;
        }
    }

    return Theme();
}

ThemeManager m; const Theme& t = theme("monokai"); if (t.isValid()) { // Theme is valid } else { // Theme is not valid } 保留主题列表和对当前主题的引用。我想使用引用而不是指针。现在,如果要求的主题不存在于经理的主题列表中,我想返回对我可以使用ThemeManagers测试的无效主题的引用。我不想使用单独的成员,例如Theme::isValid仅用于此目的。

我的问题是:是否有办法将临时对象移到Theme m_invalidTheme;范围之外?那么来自ThemeManager::theme的{​​{1}}不是一个破坏代码的悬空参考?

0 个答案:

没有答案