如何避免在C ++中使用指针/ typedef

时间:2013-05-17 16:55:36

标签: c++ pointers coding-style

每当我编写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指针类型?

2 个答案:

答案 0 :(得分:2)

好吧,首先......指针没什么问题。但是,您始终可以使用references

引用允许您使用.代替->。有更多的差异......但看看它,你会看到。 ;)

答案 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_ptrboost::scoped_ptr

3)您可以创建对指针指向的对象的引用:

std::unique_ptr<Node> np(new Node);
Node& n = *np;
n.someMemberFunction();
n.someOtherMemberFuction()->aThirdMemberFunction();