提问者:小点点

C++中的最新调用


在我的C++库中,我需要调用一个C库。 C库有两个函数:start()stop()。 在我的应用程序中,我创建了这样一个单例:

class MySingleton {
private:
    MySingleton() { start(); }
    ~MySingleton() { stop(); }
    //other attributes here, singleton keeps a "state"
public:
    static MySingleton& getInstance() {
        static MySingleton m;
        return m;
    }
};

在其他通过shared_ptr动态分配和“跟踪”的类中,我在析构函数中调用C库:

class Foo {
public:
    ~Foo() { //call c library }
};

问题是:我无法控制使用静态方法对单例的破坏。 在应用程序退出时,可能会在stop()之后,在调用C库的另一个析构函数之前调用单例析构函数。 避免这种情况的最好方法是什么? 理想情况下,我应该说“调用singleton的析构函数作为最新调用”,这可能吗?


共1个答案

匿名用户

如果您真的想在应用程序中使用单例模式,您可以从Andrei Alexandrescu的书“Modern C++Design”中学习一些东西。 有一章专门讨论单例实现。 特别是,他在第6.8段中谈到了销毁令的问题,即执行长寿的单身人士。 他提供了一个具有确定性破坏顺序的实现。

但就我个人而言,我不会采用单例模式。 仅仅为了保证一个对象的单个实例,您就会创建这么多需要解决的问题。 如果您放弃这种方法,事情可能会变得简单得多(根据您的程序体系结构,有许多方法可以解决这个问题)。 是的,有人可以创建第二个实例,但它是你的程序,你可以访问它的源代码,所以你可以确保没有人这样做。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|最新|调用)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?