在前面的《关于C++中的new》,我犯了一个很白痴的错误:new是一个用来动态分配内存的操作,而成员函数是静态分配内存的。new一个对象,只是给他的成员变量分配动态空间。
为了了解构造函数和析构函数,写了下面的程序:
class myclass
{
public:
myclass();
~myclass();
void myfun();
private:
int member;
};
myclass::myclass()
{
cout<<"myclass()"<<endl;
}
myclass::~myclass()
{
cout<<"~myclass()"<<endl;
}
void myclass::myfun()
{
member = 8;
cout<<"myfun out : "<<member<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
void test1();
void test2();
void test3();
cout<<"test1():"<<endl;
test1();
cout<<"test2();"<<endl;
test2();
cout<<"test3():"<<endl;
test3();
getchar();
return 0; return 0;
}
void test1()
{
myclass _myclass;
_myclass.myfun();
}
void test2()
{
myclass* _myclass = new myclass();
_myclass->myfun();
}
void test3()
{
myclass* _myclass = new myclass();
_myclass->myfun();
delete _myclass;
}
//////----------------输出----------------------------------/////
test1():
myclass()
myfun out : 8
~myclass()
test2();
myclass()
myfun out : 8
test3():
myclass()
myfun out : 8
~myclass()
结论:
如果定义了一个非指针型的对象变量(这么叫准确吗?),那么编译器会自动在变量的周期内调用构造函数和析构函数,如果new了对象,定义了指针变量,则必须用delete.那么,可不可以说:new 和 delete必须成对出现呢?应该是这样吧!