类中static成员和指针类型的成员怎么被析构
类中static成员和指针类型的成员如何被析构?
编译器合成的析构函数会撤销非static成员,static成员和指针static成员怎么办?
------解决方案--------------------
1. static 成员程序退出前(main函数之后),会被析构,这种情况通常你不用管。
2. static指针成员,一般情况也不用去手动释放,除非代码依赖于这个指针所指向对象析构函数所带来的副作用。这时候,可以在确保这个被指向的对象绝对不会再被其他全局变量再使用的情况下,利用std::at_exit()来释放。有点复杂,你就先当做不需要释放就行了。
------解决方案--------------------
static是全局的,我猜你的意思是想,第一个创建对象产生一个static的指针资源,最后一个对象创建的时候删除这个static指针资源,是吗?
int Test::m_iNum = 0;
void* Test::m_pData;
一般:
Test::Test()
{
if(0 == m_iNum)
{
m_pData = malloc(xxx);
}
m_iNum++;
}
Test::~Test()
{
m_iNum--;
if(0 == m_iNum)
{
free(m_pData)
}
}
要是猜中了,记得给分
编译器合成的析构函数会撤销非static成员,static成员和指针static成员怎么办?
------解决方案--------------------
1. static 成员程序退出前(main函数之后),会被析构,这种情况通常你不用管。
2. static指针成员,一般情况也不用去手动释放,除非代码依赖于这个指针所指向对象析构函数所带来的副作用。这时候,可以在确保这个被指向的对象绝对不会再被其他全局变量再使用的情况下,利用std::at_exit()来释放。有点复杂,你就先当做不需要释放就行了。
------解决方案--------------------
static是全局的,我猜你的意思是想,第一个创建对象产生一个static的指针资源,最后一个对象创建的时候删除这个static指针资源,是吗?
int Test::m_iNum = 0;
void* Test::m_pData;
一般:
Test::Test()
{
if(0 == m_iNum)
{
m_pData = malloc(xxx);
}
m_iNum++;
}
Test::~Test()
{
m_iNum--;
if(0 == m_iNum)
{
free(m_pData)
}
}
要是猜中了,记得给分