使用包含指针数组的单例时出现左值错误

error lvalue when use singleton contain array of pointer

我喜欢的单身人士

class ValueLstNode {
private:
    ZwNode* m_pZwNode[32];
public:
    ValueLstNode();
    ValueLstNode(const ValueLstNode& rhs);
    static ValueLstNode& GetInstance();
    virtual ~ValueLstNode();

    ValueLstNode& operator= (const ValueLstNode& rhs);

    ZwNode_p GetNode    (int Posion) const;
    ZwNode_p operator[] (int Posion);
    const ZwNode_p operator[] (int byPosion) const;
};

和文件.cpp

ValueLstNode::ValueLstNode() {
    for (u32_t i = 0; i < 32; i++) {
        m_pZwNode[i] = NULL;
    }
}

ValueLstNode::ValueLstNode(
    const ValueLstNode& rhs
) {
    for (u32_t i = 0; i < 32; i++) {
        m_pZwNode[i] = rhs.m_pZwNode[i];
    }
}

ValueLstNode&
ValueLstNode::operator= (
    const ValueLstNode& rhs
) {
    for (int i = 0; i < ZW_MAX_NODES; i++) {
        m_pZwNode[i] = rhs.m_pZwNode[i];
    }
    return *this;
}

ValueLstNode::~ValueLstNode() {
    for (int i = 0; i < ZW_MAX_NODES; i++) {
        if (m_pZwNode[i] != NULL) {
            delete m_pZwNode[i];
            m_pZwNode[i] = NULL;
        }
    }
}

ValueLstNode&
ValueLstNode::GetInstance() {
    static ValueLstNode m_instance;
    return m_instance;
}

ZwNode*
ValueLstNode::operator[] (
    int Posion
) {
    return m_pZwNode[Posion];
}

const ZwNode*
ValueLstNode::operator[] (
    int Posion
) const {
    return m_pZwNode[Posion];
}

但是

ValueLstNode m_ValueLstNode = ValueLstNode::GetInstance();
m_ValueLstNode[0] = NULL;

我收到错误:需要左值... 如何解决这个问题。帮我。 感谢&rg.

您创建的内容实际上并不符合惯用的单例模式。让我们看看:

class ValueLstNode {
   // ...
public:
    ValueLstNode(); // You allow pulic construction of new instances
    ValueLstNode(const ValueLstNode& rhs); // You allow new instances as copies 
    static ValueLstNode& GetInstance();
    virtual ~ValueLstNode();

    ValueLstNode& operator= (const ValueLstNode& rhs); // Well, may be the right intend,
                                                       // but not really idiomatic for a 
                                                       // singleton

    ZwNode_p GetNode    (int Posion) const;            // You return copies of your 
                                                       // internally managed elements?
    ZwNode_p operator[] (int Posion);                  // ^^^^ That
    const ZwNode_p operator[] (int byPosion) const;    // ^^^^ That
};

因为你想在 Singleton 上操作,你需要在那个单一 class.

中保持状态

所以需要returnclass个成员来操作作为参考:

ZwNode_p& operator[] (int Posion);
const ZwNode_p& operator[] (int Posion) const;

此外,您的 Singleton 实现应明确拒绝创建 class:

的副本
class ValueLstNode {
    ValueLstNode(const ValueLstNode&) = delete;
    ValueLstNode& operator=(const ValueLstNode&) = delete;
};

如有需要请参考:

ValueLstNode& m_ValueLstNode = ValueLstNode::GetInstance();

尽管如此,我并没有完全理解 单例模式 的用例是否适用于您的命名。语义感觉被破坏了。

我不明白它有什么意义 ValueLstNode 应该是 Singleton。您是想创建一个 工厂模式 而不是?