类中具有此类类型的参数

Parameter in class that has this class type

本文关键字:参数 类型      更新时间:2023-10-16
    class Vertex {
    public:
        Vertex* previous_vertex_id;
        Vertex::Vertex() {}
        Vertex::~Vertex() {}
}

现在它可以编译,但我需要严格previous_vertex_id没有指针,它用于使用此属性的进一步代码。我怎样才能做到这一点?

你不能有一个以自身为成员的类,这样的对象的大小将是无限的。包含VertexVertex,其中包含Vertex等。

从这个问题以及您之前发布的一个问题来看,您似乎想要类似 java 的东西,但C++。你想要这样的东西:

class Vertex {
public:
    Vertex* previous_vertex_id;
    ...
    void setPrevious(Vertex &v) {
        previous_vertex_id = &v;
    }
    Vertex &getPrevious() {
        return (*previous_vertex_id); // trusting that the pointer will still be valid.
    }
}

现在,重要的是要知道何时在C++中复制对象以及何时引用对象。对于我刚才描述的Vertex类:

Vertex v1{}; // construct a new vertex
Vertex v2{}; // construct a new vertex
// v3 is a copy of v1, they are separate objects at different memory locations.
Vertex v3 = v1;
// v4 is a reference to v1, they are the same object under a different name.
Vertex &v4 = v1;
// v1.previous_vertex_id is a pointer to v2.
v1.setPrevious(v2);
// v5 is a copy of v2. A different object at a different memory location.
Vertex v5 = v1.getPrevious();
// v6 is a reference to v2, they are the same object under a different name.
Vertex &v6 = v1.getPrevious();

现在,您可以使用getPrevious作为非指针访问前一个顶点。只是要小心你分配它的方式,所以你只在预期的时候复制它(v5/v6的例子(。

只写

Vertex previous_vertex_id; 

不要使用*