实例的静态集合

Static Collection of Instances C++?

本文关键字:集合 静态 实例      更新时间:2023-10-16

我有一个类Phone,我想要它,创建时将自己添加到电话的静态集合。我有一个集合:

static vector < class Phone* > instances;

在构造函数中我这样做:

Phone::instances.push_back(this);

但是链接器抛出了一个无法解析的外部符号,这是为什么?我做错了什么?我没有找到类似的问题。有必要在构造函数之外添加实例吗?还是我必须在另一个类上收集?非常感谢。

必须在类之外声明静态成员。

标题:

class Phone{
...
static vector < class Phone* > instances;
...
};

在你的cpp中,你需要创建它的实例:

//on global or namespace scope
vector <Phone*> Phone::instances;

另外,只是一个旁注,不是对您的问题的直接回答,最好有一个"std::shared_ptr"的向量,而不是原始指针。但是如果你是std::shared_ptr的一个向量,你将不能把"this"添加到那个向量中,所以你必须在你的类中再添加一个东西,它将能够访问std::shared_ptr封装的类中的"this"。你可以这样做:

class Phone : public std::enable_shared_from_this<Phone>
{
    static vector<std::shared_ptr<Phone>> instances;
}
//then somewhere in your code:
Phone::instances.push_back(shared_from_this());

在你的。cpp文件中:

vector<std::shared_ptr<Phone>> Phone::instances;