C++中构造函数和析构函数

博客回顾《关于C++中的new》的错误,指出new仅为对象成员变量分配动态空间,成员函数是静态分配。通过代码示例展示构造函数和析构函数的调用情况,得出非指针型对象变量编译器自动调用构造和析构函数,new对象后需用delete,且new和delete应成对出现的结论。

在前面的《关于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必须成对出现呢?应该是这样吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值