类层次结构中所有对象的静态向量 shared_ptr
Static vector of shared_ptr's for all the objects of a class hierachy
我有一个小类层次结构,我希望所有对象都有一个指向该类层次结构中任何其他对象的指针。所以我决定static vector
shared_ptr
是个好主意。更具体地说,我有一个类A
它有一个protected
字段:
static std::vector< std::shared_ptr<A> > vector_of_objects;
它在构造函数中也有这样一行来填充向量:
vector_of_objects.emplace_back( this );
因此,这个想法的要点是:当创建从A
继承的任何类的对象时,它将调用基类构造函数并将指向自身的指针指向静态向量。
坦率地说,我很困惑这是否可能.无论如何,在构造器的这一行,我遇到了一个链接错误 - 对A::vector_of_objects
的未定义引用.我需要以某种方式预初始化向量吗?..
如果我弄错了,除了创建外部向量之外,还有什么方法可以实现这个想法吗?
static
数据成员不仅必须在类定义中声明,而且还必须在一个转换单元中定义(如果使用 ODR)。
作为旁注,您的静态向量应该只存储 weak_ptr
s,除非您真的想让它们永远保持活动状态(在这种情况下,原始指针无论如何就足够了)。
另外,看看你的基类的std::enable_shared_from_this
,如果它们真的都是shared_ptr
管理的。
不知道为什么你需要这样的结构,到目前为止,我的印象是你只需要一组(不是 std::set)的对象。至于链接错误,您应该像这样定义静态成员:
std::vector<std::shared_ptr<A>> A::vector_of_objects;
否则,您只是声明了它,而不是定义。
使用完整代码段进行更新:
#include <vector>
#include <memory>
class A {
public:
static std::vector<std::shared_ptr<A>> allObjects;
A() {
allObjects.emplace_back(this);
}
};
std::vector<std::shared_ptr<A>> A::allObjects;
相关文章:
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何从静态向量访问类元素?
- 如何将对象添加到类中的静态向量
- 使用 C++98 标准填充二维静态向量
- C++ 入门 12.1:我可以在类中使用静态向量成员实现 StrBlob<string> 吗?
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- 如何通过参考传递向量的静态向量
- 无法在 c++ 中初始化静态向量
- C++类中的静态向量
- 静态常量 std::<char>没有堆的向量初始化?
- 静态"global"向量似乎未填充
- C++将局部变量添加到静态向量而不复制
- 当push_back到向量中时,我是否需要复制构造函数来修改静态成员
- 包含多态对象的向量:静态断言误差
- 必须调用对非静态成员函数的引用(向量)
- 如何在C 中创建指向向量的静态指针
- 动态增长的向量,在 cpp 中声明为静态
- 大小在运行时确定的静态数组的向量
- 在迭代向量的 for 循环中无效使用非静态数据成员
- C :如何在类内声明一个空的私人静态向量