大家好,
我有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;
}
}
现在我的问题是我们在静态函数中分配内存并返回类类型的指针,但在这里我想重新引用一个引用,因为我们不想控制指向用户的指针。除非用户要求或想要在程序结束时删除,我也不想立即删除如何删除内存?因为只存在类的实例,因为只有静态函数。
感谢您的帮助。
答案 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
}