有没有办法做到动态链接库卸载后这部分内存仍保留呢?
9 个解决方案
#1
智能指针:shared_ptr
#2
谁分配谁释放
#3
关注,学习!
#4
自己建拷贝。内存谁申请谁释放
#5
智能指针也不行 只要dll卸载后操作里面分配的内存就会出错
==================
我现在的程序需要在启动时从dll里面获得一些对象
并一直用到程序结束才释放
所以如果我在程序结束前释放了dll则会导致这些对象析构时出错
但如果不显式释放dll又感觉不好
所以想找办法让dll分配对象空间时分配到程序堆中,而不要分配到dll堆中
#6
我的意思是:从EXE向DLL传递一个智能指针。
#7
还是想不明白ls的意思
==========
现在我的情况是这样的
定义了一个接口IA;
动态链接库里面提供了一个函数,返回一个指向IA子类的对象
IA *getChild() { return new Child();} //Child的实现不在exe里面
exe里面打开动态链接库调用getChild
==========
获得的指针会一直持续用到程序结束,而动态链接库则不再需要调用
==========
所以我想获得指针后就关闭动态链接库,节省点资源
但是发现这样一关,指针所指向的内存就失效了
==========
不知道用智能指针如何处理这样的情况?
==========
现在我的情况是这样的
定义了一个接口IA;
动态链接库里面提供了一个函数,返回一个指向IA子类的对象
IA *getChild() { return new Child();} //Child的实现不在exe里面
exe里面打开动态链接库调用getChild
==========
获得的指针会一直持续用到程序结束,而动态链接库则不再需要调用
==========
所以我想获得指针后就关闭动态链接库,节省点资源
但是发现这样一关,指针所指向的内存就失效了
==========
不知道用智能指针如何处理这样的情况?
#8
用GlobalAlloc,GlobalFree代替
或者在dll里面写个管理类
class ManageMemory
{
public:
virtual void* New(size_t size) //注意前面加virtual
{
m_ptr=new char[size];
return m_ptr;
}
virtual void* Delete()
{
if(m_ptr)
{
delete m_ptr;
m_ptr=NULL;
}
}
private:
void* m_ptr;
};
//简单的封装 然后内存分配释放全部调用New/Delete
或者在dll里面写个管理类
class ManageMemory
{
public:
virtual void* New(size_t size) //注意前面加virtual
{
m_ptr=new char[size];
return m_ptr;
}
virtual void* Delete()
{
if(m_ptr)
{
delete m_ptr;
m_ptr=NULL;
}
}
private:
void* m_ptr;
};
//简单的封装 然后内存分配释放全部调用New/Delete
#9
delete []m_ptr; //掉了
#1
智能指针:shared_ptr
#2
谁分配谁释放
#3
关注,学习!
#4
自己建拷贝。内存谁申请谁释放
#5
智能指针也不行 只要dll卸载后操作里面分配的内存就会出错
==================
我现在的程序需要在启动时从dll里面获得一些对象
并一直用到程序结束才释放
所以如果我在程序结束前释放了dll则会导致这些对象析构时出错
但如果不显式释放dll又感觉不好
所以想找办法让dll分配对象空间时分配到程序堆中,而不要分配到dll堆中
#6
我的意思是:从EXE向DLL传递一个智能指针。
#7
还是想不明白ls的意思
==========
现在我的情况是这样的
定义了一个接口IA;
动态链接库里面提供了一个函数,返回一个指向IA子类的对象
IA *getChild() { return new Child();} //Child的实现不在exe里面
exe里面打开动态链接库调用getChild
==========
获得的指针会一直持续用到程序结束,而动态链接库则不再需要调用
==========
所以我想获得指针后就关闭动态链接库,节省点资源
但是发现这样一关,指针所指向的内存就失效了
==========
不知道用智能指针如何处理这样的情况?
==========
现在我的情况是这样的
定义了一个接口IA;
动态链接库里面提供了一个函数,返回一个指向IA子类的对象
IA *getChild() { return new Child();} //Child的实现不在exe里面
exe里面打开动态链接库调用getChild
==========
获得的指针会一直持续用到程序结束,而动态链接库则不再需要调用
==========
所以我想获得指针后就关闭动态链接库,节省点资源
但是发现这样一关,指针所指向的内存就失效了
==========
不知道用智能指针如何处理这样的情况?
#8
用GlobalAlloc,GlobalFree代替
或者在dll里面写个管理类
class ManageMemory
{
public:
virtual void* New(size_t size) //注意前面加virtual
{
m_ptr=new char[size];
return m_ptr;
}
virtual void* Delete()
{
if(m_ptr)
{
delete m_ptr;
m_ptr=NULL;
}
}
private:
void* m_ptr;
};
//简单的封装 然后内存分配释放全部调用New/Delete
或者在dll里面写个管理类
class ManageMemory
{
public:
virtual void* New(size_t size) //注意前面加virtual
{
m_ptr=new char[size];
return m_ptr;
}
virtual void* Delete()
{
if(m_ptr)
{
delete m_ptr;
m_ptr=NULL;
}
}
private:
void* m_ptr;
};
//简单的封装 然后内存分配释放全部调用New/Delete
#9
delete []m_ptr; //掉了