标题:
求个C++中的析构函数的详细解释
[打印本页]
作者:
netice
时间:
2008-3-14 21:51
标题:
求个C++中的析构函数的详细解释
。。。学了段时间C++
析构函数有点小问题想请教下
在析构里大家常用的两个宏
#define SafeRelease(pObject) if(pObject!=NULL){pObject->Release();pObject=NULL;}
#define SafeDelete(p) {if(p) {delete (p); (p)=NULL;}}//删除对象
#define SafeDeleteArray(p) {if(p) {delete[] (p); (p)=NULL;}}//删除数组对象
想详细问下这个3个宏定义的区别
个人认为是:SafeRelease释放接口对象
SafeDelete 删除指针对象
有时候很疑问,为什么定义的私有成员无法用这两个函数释放或删除呢?
。。。想问下这3个函数的具体用的地方和不同点。谢谢
作者:
Nothing
时间:
2008-3-15 09:57
#define SafeRelease(pObject) if(pObject!=NULL){pObject->Release();pObject=NULL;}
#define SafeDelete(p) {if(p) {delete (p); (p)=NULL;}}//删除对象
#define SafeDeleteArray(p) {if(p) {delete[] (p); (p)=NULL;}}//删除数组对象
已经说的很明确了,第一个是删除对象,第二上是删除变量,第三个是删除数组变量
作者:
netice
时间:
2008-3-15 20:09
:L 我只是想知道为什么有的可以删除有的不行呢?
例如这个摄像机类里的私有成员为什么都不能删除呢?
class Camera
{
public:
Camera();
Camera(CameraType cameraType); // 重载构造器
~Camera(); // 析构器
void strafe(float units); // 左右移动
void fly(float units); // 上下移动
void walk(float units); // 前后移动
void pitch(float angle); // 倾斜(绕right向量,x轴)
void yaw(float angle); // 偏航(绕up向量,y轴)
void roll(float angle); // 滚转(绕look向量,z轴)
//void
void getViewMatrix(D3DXMATRIX* V); // 取得 摄像机视矩阵
void setCameraType(CameraType cameraType); // 设置 摄像机的类型(人、飞行器)
void getPosition(D3DXVECTOR3* pos); // 取得 摄像机位置
void setPosition(D3DXVECTOR3* pos); // 设置 摄像机位置
void getRight(D3DXVECTOR3* right); // 取得 左右方向 移动的向量
void getUp(D3DXVECTOR3* up); // 取得 上下方向 移动的向量
void getLook(D3DXVECTOR3* look); // 取得 前后方向 移动的向量
DWORD getCameraType( void );
private:
CameraType _cameraType;
D3DXVECTOR3 _right; // 保存 左右方向 移动的向量
D3DXVECTOR3 _up; // 保存 上下方向 移动的向量
D3DXVECTOR3 _look; // 保存 前后方向 移动的向量
D3DXVECTOR3 _pos; // 保存 摄像机位置
};
作者:
Nothing
时间:
2008-3-16 08:36
你的私有变量在哪里删除?是删除Camera吗?应当使用SafeRelease
作者:
netice
时间:
2008-3-17 22:03
...实验出来了。。。嘻嘻,,谢谢老大了
我一直一个错误的理解,现在算是清晰了
对象在调用的类中析构,在本身类中只析构本身的调用的对象,传进来的还需要原来的类中析构。
析构只是析构对象与指针。普通变量不用析构。
链表析构要单个进行析构。
由于写的宏中判断是(对象==NULL),若不小心调用了Release方法没有进行(对象=NULL)调用那个宏析构的时候,操作也会出问题。。
作者:
Nothing
时间:
2008-3-17 23:26
从VB转到其他语言,确定容易搞错=和==
欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/)
Powered by Discuz! 6.0.0