使用包含指针数组的单例时出现左值错误
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。您是想创建一个 工厂模式 而不是?
我喜欢的单身人士
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。您是想创建一个 工厂模式 而不是?