我正在构建一棵树,并且我有一个Node
包含两个或三个整数、一个向量和一个指针的类。向量存储Node
实例,如下 - 命名Node
为A
:
class A {
public:
A(A *parent) :
_parent(parent) {
}
std::vector<INSTANCES_OF_A> v;
private:
A *_parent;
};
我确实可以使用:
class A {
public:
A(A *parent) :
_parent(parent) {
}
std::vector<A *> v;
private:
A *_parent;
};
// Insertion
A a;
a.v.push_back(new A(&a));
或者:
class A {
public:
A(A *parent) :
_parent(parent) {
}
std::vector<A> v;
private:
A *_parent;
};
// Insertion
A a(NULL);
a.v.push_back(A(&a));
在第一种情况下,除了实例本身之外,我会为每个指向A
.
在第二种情况下,这 4~8 个字节将被保存,但以下场景配置:
a.v.push_back(A(&a))
推回-动态分配,我想-从A(&a)
;构建的实例- 向量将推回这些元素,但一旦达到临时限制,向量将被重新分配,它可能会被移动;
- 移动向量会改变在构造每个成员实例期间建立的地址
A
关联A *_parent
。
约束:
- 我不知道初始向量的确切大小;
- 每次发生矢量重新分配时重新处理/重建链接必然会产生过多的额外处理。
问题:
有没有办法解决这个悬空指针问题,尊重这两个限制?或者,有没有更好的方法来解决这个问题?