我有一个iNode
类,其成员为_nodeState
。该类外部的函数想要访问成员_nodeState
。所以我需要在getState
类中设计一个iNode
函数来传递这些信息。在调用_nodeState
函数之前动态分配getState
。我想将iSharedPtr<iStateHash>
用于_nodeState而不是原始指针。但是,iStateHash
的当前实现是“侵入式指针”类型,所以我必须使用_nodeState
的原始指针。
class iNode{
public: return_type getState(input_type){}
void initializeState(){_nodeState = new iStateHash;}
private:
typedef iHashMap<int ikey, iSharedPtr<iValue>> iStateHash;
iStateHash* _nodeState;
};
由于_nodeState指向大量数据,因此通过指针传递或通过引用传递似乎比传递值更好。
如果它通过引用传递,那么return_type
函数的getState
应该是引用类型(在c ++ 11之后似乎不建议使用const引用返回)。所以我有设计1:
iStateHash* & iNode::getState(){return _nodeState;}
所以在课外的一个街区:
iNode newNode;
newNode.initializeState();
iStateHash &myNodeState = newNode.getState();
如果它通过指针传递,则可以返回指针或将指针设置为函数参数:
iStateHash * iNode::getState(){return _nodeState;}
或
void iNode::getState(iStateHash* outputState){outputState = _nodeState;}
然后
iNode newNode;
newNode.initializeState();
iStateHash *myNodeState = NULL;
getState(myNodeState);
由于在这种情况下不能使用共享指针,因此不推荐使用原始指针?或者,如果原始指针仍然比返回引用更好?
或者有更好的方法在课堂外获取_nodeState
信息吗?
此外,如何使用iStateHash _nodeState;
作为成员变量而不是使用指针类型(iStateHash* _nodeState;
)?这会更好吗?