-3

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

4

2 回答 2

2

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

引用允许您使用.而不是->. 还有比这更多的差异......但看看它,你会看到。;)

于 2013-05-17T16:57:58.527 回答
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_ptror boost::scoped_ptr

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

std::unique_ptr<Node> np(new Node);
Node& n = *np;
n.someMemberFunction();
n.someOtherMemberFuction()->aThirdMemberFunction();
于 2013-05-17T17:54:32.723 回答