第一次提问,不能小气(100分):有关临时对象(生存期)的问题,有些疑惑。
这段代码是摘自《精通MFC》第1章的一个动态调用的例子,做了改动,
#include <iostream>
#include <conio.h>
using namespace std;
class V1
{
private:
int Size;
public:
V1()
{
Size=0;
cout<<"Construct a object."<<endl;
}
~V1()
{
cout<<"Destroy a object !"<<endl;
}
void DoShow()
{
cout<<"In member function DoShow()."<<endl;
}
};
void main()
{
int nObjSize=sizeof(V1);
void *pV1Obj=new char[nObjSize]; // 动态分配V1大小的内存块.
v1();
*(int *)pV1Obj=*(int*)&V1(); // 记作(1):生成临时对象,结果显示马上被析构了
*(V1*)pV1Obj=V1(); // 既然被析构了,pV1Obj指向的地方有效吗???
((V1*)pV1Obj)->DoShow();
((V1*)pV1Obj)->~V1();
delete [] pV1Obj;
pV1Obj=NULL;
_getch();
}
运行结果...
Construct a object.
Destroy a object!
Construct a object.
Destroy a object!
Construct a object.
Destroy a object!
In member function DoShow().
Destroy a object!
临时对象构造之后,马上又调用了析调函数,那么这个临时对象占用的内存不就释放了吗?指针pV1Obj指向那个地方还可靠(有效)吗?每次生成的临时对象在同一个地址吗?对这个临时对象疑问多多,希望各位兄弟姐妹借题发挥,解我疑惑。先谢。