所以我有一个带有静态变量的类,它们是静态的原因是(虽然它看起来似乎无关紧要)效率(只需要加载一次,减少同一文件内存中的存储冗余)。
无论如何我想知道,有没有办法检查变量是否已被加载?
或者有没有办法在第一次创建此类的实例时调用特定的构造函数,而在其他实例存在的情况下使用另一个实例?
如果这些都不合适,解决方案是什么?
答案 0 :(得分:3)
如果您的静态成员是私有成员,并且在与所有类成员函数相同的翻译单元中初始化,则标准保证静态成员在使用之前将被初始化。请参阅:When are static C++ class members initialized?
在其他情况下,此保证对您没有帮助(例如,从其他翻译单元或内联成员函数访问非私有静态成员)。
您可以使用isInitialized
标记玩游戏,但请注意,如果没有进一步的工作,这不是线程安全的。
C ++ FAQ建议在函数中包装静态类实例,这可以确保在首次使用时初始化它们。 e.g:
Fred& x()
{
static Fred* ans = new Fred();
return *ans;
}
来源:https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use
答案 1 :(得分:0)
你走了:
Realm.getInstance(Context context)
答案 2 :(得分:0)
您可以执行以下操作:
struct StaticData
{
// some variables
};
class YourClass
{
public:
YourClass(/*..*/) {
if (staticData == nullptr) {
staticData = std::make_unique<StaticData>(/*..*/)
}
}
private:
static std::unique_ptr<StaticData> staticData;
};
static std::unique_ptr<StaticData> YourClass::staticData;