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

C++ 删除C+中静态变量的内存+;,c++,C++,可能重复: 大家好 我有C++类如下< /P> interface myInterface; class anotherClass : public myInterface {}; class myClass { private: myClass() {} ~myClass() {} typedef std::map<string, myInterface* > stringToClass; static stringToCla

可能重复:

大家好

我有C++类如下< /P>

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);

};
 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;
     }
}
现在我的问题是我们在静态函数中分配内存并返回一个类类型的指针,但这里我想重新运行一个引用,因为我们不想将指针的控制权交给用户。而且我也不想立即删除,除非用户在程序结束时要求或想要删除。我们如何删除内存?因为只有类的实例,所以只有静态函数

感谢您的帮助。

注意: 您应该在旧线程上重新格式化,而不是创建新问题。不管怎样,我把答案贴在这里。
我认为在您的情况下,析构函数不会有帮助,因为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
}
  • 使用智能指针管理资源,建议使用共享\u ptr。 虽然我在第二种方式上投入了很多,但我建议第三种方式

  • 在“我不是几分钟前才回答这个问题吗?”下存档的准确副本,没有必要复制和粘贴上一个问题的答案。这个终将关闭。没有理由在这段时间把事情搞得乱七八糟。当问题以重复的形式结束时,会有一个提示,线程可能会被合并,尽管我不确定我是否见过答案迁移。对这个地方来说,这是非常新的。。所以我不知道会发生什么。。谢谢你们的建议,伙计们。