C++ 如何制作黑莓10的单人类
假设我们必须在应用程序的整个生命周期中使用一个类的单个对象。在BlackBerry 10中,是否可以声明一个可以在程序内任何地方使用的全局对象?您可以这样做,但更好的方法可能是使用一个设计为单例的类: 辛格尔顿水电站C++ 如何制作黑莓10的单人类,c++,blackberry-10,C++,Blackberry 10,假设我们必须在应用程序的整个生命周期中使用一个类的单个对象。在BlackBerry 10中,是否可以声明一个可以在程序内任何地方使用的全局对象?您可以这样做,但更好的方法可能是使用一个设计为单例的类: 辛格尔顿水电站 class Singleton { private: Singleton(); public: virtual ~Singleton(); static Singleton &instance(); int getMemberField(
class Singleton {
private:
Singleton();
public:
virtual ~Singleton();
static Singleton &instance();
int getMemberField() { return m_memberField; }
void setMemberField(int mf) { m_memberField = mf; }
private:
static Singleton *p_instance;
int m_memberField;
};
Singleton.cpp
Singleton* Singleton::p_instance = NULL;
Singleton::Singleton() {
p_instance = this;
m_memberField = 0;
}
Singleton::~Singleton() {
p_instance = NULL;
}
Singleton& Singleton::instance() {
if (p_instance == NULL) {
p_instance = new Singleton();
}
return *p_instance;
}
应用程序内代码
Singleton::instance().setMemberField(25);
Singleton::instance().getMemberField();
这样做的真正好处是单例处理自己的全局指针。这是线程安全的吗?它能保证毁灭吗?(我的理解是否定的)你是正确的,它不是线程安全的书面形式。保证销毁是否符合在程序生命周期内存在的要求?如果您愿意,请随意修改我的示例以添加这些功能。我理解保证销毁意味着调用dtor——例如,如果我在ctor中获取一些外部资源并在dtor中释放它会怎么样?我不相信你会看到释放发生在这里。示例:但是我不确定这是否需要C++11(我在互联网上的其他地方看到过,但在帖子中没有看到)。此外,这与问题无关,但我个人会避免使用singleton,Loki的评论很贴切:
最好在main中创建对象,并将其作为参数传递给所有需要的对象。