在C ++中删除静态变量的内存

时间:2011-02-02 10:11:57

标签: c++

  

可能重复:
  deleting memory allocated in static function in C++

大家好,

我有C ++类如下

interface myInterface;


class anotherClass : public myInterface {};

class myClass {
   private:
    myClass() {}
    ~myClass() {}

    typedef std::map<string, myInterface* > stringToClass;
        static stringToClass s_stringToClass;

    public:
         static myInterface& getStringToclass(string name);

};
上面的getStringToClass定义中的

如下

 myInterface& myClass::getStringToClass(string name) {
     stringToClass::iterator iter;
     iter = s_stringToClass.find(name);

     if(iter == s_stringToClass.end()) {
          typedef stringToClass::value_type stringToClassPair;
          anotherClass* pothClass = new anotherClass();
          s_stringToClass.insert(stringToClassPair(name, pothClass));
          return pothClass;
     }
     else {
        return iter->second;
     }
}

现在我的问题是我们在静态函数中分配内存并返回类类型的指针,但在这里我想重新引用一个引用,因为我们不想控制指向用户的指针。除非用户要求或想要在程序结束时删除,我也不想立即删除如何删除内存?因为只存在类的实例,因为只有静态函数。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

注意: 您应该重新格式化旧线程,而不是创建新问题。无论如何,我在这里粘贴我的答案。
我认为在你的情况下,析构函数不会有帮助,因为没有MyClass的任何对象。

我提出三种方法 1.不存储指针,存储对象本身。 2.将删除功能放入atexit;在你的情况下

class MyClass
{
.....//Your already existing code
static void Destroy()
{
 //iterate s_StringToClass and delete them
}

static void getStringToClass( string name )
{
 struct DestroySetter
 { 
      DestroySetter()
      { 
           atexit( MyClass::Destroy );
      }
 };
 static DestroySetter setter; //Setup the destoyer
 //Your existing code here
}
  1. 使用智能指针管理资源,建议使用shared_ptr。 虽然我采取了第二种方式,但我建议采用第三种方式。