每当我编写C ++代码时,我总是使用指针类型和 - >引用成员函数。反正我是否要避免看起来像这样的代码:
typedef Node *NodeRef;
typedef Graph *GraphRef;
Node{
vector<NodeRef> nodeList;
};
Graph{
vector<NodeRef> list;
};
Node::Node(){
nodeList.push_back(this);
}
NodeRef n = new NodeRef();
n->someMemberFunction();
n->someOtherMemberFuction()->aThirdMemberFunction();
我是否可以使用.
进行成员访问,并使用原始对象类型或引用而不是typedef指针类型?
答案 0 :(得分:2)
引用允许您使用.
代替->
。有更多的差异......但看看它,你会看到。 ;)
答案 1 :(得分:2)
NodeRef n = new NodeRef();
这甚至不会编译,我假设您打算使用new Node()
1)为什么你还在使用new
?这样做有什么不对:
Node n;
n.someMemberFunction();
多田!现在你没有指针。
如果你不想在这里需要一个指针:
n.someOtherMemberFuction()->aThirdMemberFunction();
然后根本不要从someOtherMemberFunction()
返回指针。
2)如果你必须使用new
,那么使用智能指针拥有该对象:
std::unique_ptr<Node> n(new Node);
如果你不这样做,小猫会死亡,血液会从天而降。
如果您无法使用std::unique_ptr
,请使用boost::shared_ptr
或boost::scoped_ptr
。
3)您可以创建对指针指向的对象的引用:
std::unique_ptr<Node> np(new Node);
Node& n = *np;
n.someMemberFunction();
n.someOtherMemberFuction()->aThirdMemberFunction();