从外部获取类成员的哈希表:指针或引用?

时间:2016-08-14 14:49:45

标签: c++ c++11 reference return shared-ptr

我有一个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;)?这会更好吗?

0 个答案:

没有答案