我创建了一个示例类(仅用于学习目的),它不必使用构造函数初始化列表,因为我想使用new
/delete
和malloc
/获得相同的效果free
。除了不使用构造函数初始化列表之外,还有哪些其他约束?您是否认为以下代码以正确的方式模拟了新建/删除行为?
#include <iostream>
using namespace std;
class X
{
private:
int* a;
public:
X(int x)
{
this->a = new int;
*(this->a) = x;
}
~X() { delete this->a; }
int getA() { return *(this->a); }
};
class Y
{
private:
int* a;
public:
void CTor(int x)
{
this->a = new int;
*(this->a) = x;
}
void DTor() { delete this->a; }
int getA(){ return *(this->a); }
};
void main()
{
X *xP = new X(44);
cout<<xP->getA()<<endl;
delete xP;
Y *yP = static_cast<Y*>(malloc(sizeof(Y)));
yP->CTor(44);
cout<<yP->getA()<<endl;
yP->DTor();
free(yP);
system("pause");
}
如果不使用delete xP
,程序结束时会自动调用析构函数,但不会释放空闲存储区(即释放 的xP
空闲存储区,字段的空闲存储区a
)。当使用delete xP
析构函数被调用,然后一个自由存储被完全释放。如果我错了,请纠正我。