C++,全局变量如果用new了,需要delete吗?

关注者
79
被浏览
158,375

44 个回答

重点不是需不需要delete释放内存,而是你的析构到底执行的是什么动作

换句话说,对于全局变量(或者换个说法,单例),其实例释放时的析构动作本身才是重要的。


我来举个简单的例子,不考虑线程安全内存屏障之类的问题

class GlobalLogger {
    private:
        ostream* os;
        GlobalLogger* instance;
        GlobalLogger() {
            os = new ofstream;
            os->.open("xxxx", ios::app| ios:binary);
        ~GlobalLogger() {
            if (nullptr != os) {
                os->write(0x13570d0a);
                os->close();
                os = nullptr;
    public:
        static GlobalLogger* getInstance() {
             if (nullptr == GlobalLogger::instance) {
                 GlobalLogger::instance = new GlobalLogger();
             return GlobalLogger::instance;
        static GlobalLogger* releasInstance() {
             if (nullptr != GlobalLogger::instance) {
                 GlobalLogger::instance->~GlobalInstance();
                 GlobalLogger::instance = nullptr;