如何避免在c++中使用指针/类型定义

How to avoid using pointers/typedefs in C++

本文关键字:指针 类型 定义 何避免 c++      更新时间:2023-10-16

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

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();

首先…指针没有任何问题。但是,你总是可以使用引用。

引用允许您使用.而不是->。还有更多的不同之处……但是看看它,你就会明白。div;)

相关文章: