C++ 如何制作黑莓10的单人类

C++ 如何制作黑莓10的单人类,c++,blackberry-10,C++,Blackberry 10,假设我们必须在应用程序的整个生命周期中使用一个类的单个对象。在BlackBerry 10中,是否可以声明一个可以在程序内任何地方使用的全局对象?您可以这样做,但更好的方法可能是使用一个设计为单例的类: 辛格尔顿水电站 class Singleton { private: Singleton(); public: virtual ~Singleton(); static Singleton &instance(); int getMemberField(

假设我们必须在应用程序的整个生命周期中使用一个类的单个对象。在BlackBerry 10中,是否可以声明一个可以在程序内任何地方使用的全局对象?

您可以这样做,但更好的方法可能是使用一个设计为单例的类:

辛格尔顿水电站

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中创建对象,并将其作为参数传递给所有需要的对象。