今天下午我在释放一个dll中动态分配的内存的时候,居然发生错误,释放失败,回想一下以前似乎也遇到过,解决方法就是哪儿创建的在哪儿释放。VTK中的做法是使用静态的New()方法构造,Release()方法释放。如:
class Obj
{
public:
static Obj* New()
{
return new Obj();
}
void Release()
{
delete this;
}
private:
Obj(){}
~Obj(){}
......
};
采用如上方法保证了一个对象只在他自己的模块中被创建和释放,声明构造函数和析构函数为私有。可以限制对象的创建和释放方法,不符合要求的会在编译时就报错了。
这在linux下是不会有这个问题的,有关为何windows下不能在一个模块中释放另一个模块的内存,请参阅:
class Obj
{
public:
static Obj* New()
{
return new Obj();
}
void Release()
{
delete this;
}
private:
Obj(){}
~Obj(){}
......
};
采用如上方法保证了一个对象只在他自己的模块中被创建和释放,声明构造函数和析构函数为私有。可以限制对象的创建和释放方法,不符合要求的会在编译时就报错了。
这在linux下是不会有这个问题的,有关为何windows下不能在一个模块中释放另一个模块的内存,请参阅: