我定义了如下结构体:
struct OriginalGcp
{
double *pGcp_Px, *pGcp_Py, *pGcp_Gx, *pGcp_Gy, *pGcp_Gz; //控制点指针
};
在某个函数中,定义结构体变量如下:
OriginalGcp m_op1;m_op1.pGcp_Px=new double [10];
m_op1.pGcp_Py=new double [10];
……
……
……成员有很多,我只是列出了几个指针变量。
然后这个函数结束之后,我该如何释放这个结构体变量m_op1 ?
解决方案 »
- [Help]时间如何转成16进制???
- 数据库的float操作
- 一个最初级的问题,希望大家驻足!
- Ado到底比Dao先进在哪里? 为什么微软要淘汰Dao?
- 如何编程修改Windows操作系统的语言?
- 在一个动态库中自定义的类(不继承自任何类),怎么样实现消息映射?
- 微软的面试题---比海盗分金子要难---
- 我在上招聘网站求职的时候,这个公司--- "珠海捷朗菱网络科技有限公司 "---老是挡我的视线,有没有这个公司的人,我在这里骂你们老板缺德
- CTreeCtrl刷新 闪烁
- 现在很流行的更换程序的外观,这是如何实现的?VC++6.0也能做到吗?怎么做的?如果有资料请告诉我.
- VC++中打开.dsw文件 返回提示说:windows找不到文件,请确定文件名是否正确……
- 问下大家OpenGL的一个问题
一个个释放
delete []m_op1.pGcp_Py;
delete []m_op1.pGcp_Gx;
delete []m_op1.pGcp_Gy;
delete []m_op1.pGcp_Gz;在确定不需要继续使用后,运行上述代码。最好放在析构函数中
析构函数里面释放
class COriginalGcp : public OriginalGcp
{
public:
COriginalGcp()
{
pGcp_Px = new double [10];
pGcp_Py = new double [10];
pGcp_Gx = new double [10];
pGcp_Gy = new double [10];
pGcp_Gz = new double [10];
}
~COriginalGcp()
{
delete[] pGcp_Px;
delete[] pGcp_Py;
delete[] pGcp_Gx;
delete[] pGcp_Gy;
delete[] pGcp_Gz;
}
}
析构函数里面释放
class COriginalGcp : public OriginalGcp
{
public:
COriginalGcp()
{
pGcp_Px = new double [10];
pGcp_Py = new double [10];
pGcp_Gx = new double [10];
pGcp_Gy = new double [10];
pGcp_Gz = new double [10];
}
~COriginalGcp()
{
delete[] pGcp_Px;
delete[] pGcp_Py;
delete[] pGcp_Gx;
delete[] pGcp_Gy;
delete[] pGcp_Gz;
}
};
结尾忘了;
OriginalGcp *m_op1=new OriginalGcp;
然后对成员变量开辟空间如下:
m_op1->pGcp_Px=new double [10];
m_op1->pGcp_Py=new double [10];
……最后函数运行结束时,运行如下代码:
delete m_op1;是不是就可以了?
delete/new会调用相应的析构函数/构造函数。
free/malloc不会调用析构函数/构造函数、
你在构造里面把所有指针NULL
析构里面判断所有指针不为NULL则自动释放就可以了我自己用的一个自动释放结构体的class:
template <class T>
class CSafeSaveClass
{
public:
T* This; CSafeSaveClass()
{
This = NULL;
};
CSafeSaveClass(T* Type)
{
This = Type;
};
~CSafeSaveClass()
{
if(This)
delete This;
};
void Attach(T* Type)
{
if(!This)
This = Type;
};
void Release()
{
if(This)
{
delete This;
This = NULL;
}
}
};// 通过成员变量This指针访问元素
否则还需要delete掉成员中new出来的空间。