构造函数和析构函数求详解

构造函数和析构函数求详解,第1张

构造函数就是在创建一个对象的时候能够调用的函数,可以定义多个构造函数,类似于函数的重载,如果你不定义构造函数,那么系统会默认给你创建一个构造函数,析构函数你可以理解为销毁对象时候释放内存。多看看书就能明白。

析构就是对象离开生存空间时执行的,用来清理分配的空间之类
虚函数的作用:假如有类A类A派生出类B
那么如果写A p = new B;时就得到了一个指向类B的指针,这个指针的类型是A
如果类A和类B中都有void Out()这么个函数p->Out()将调用A::Out()函数
而如果把类A中的改成虚函数virtual void Out()p->Out()就将调用B::Out()函数
就是这样
下面抄几段:
析构函数是“反向”的构造函数。它们在对象被撤消(回收)时调用。析构函数的名 称除了最前面的“~”符号外,与类的名称相同。例如,类String的析构函数是~string()。 析构函数通常用于当一个对象不再需要时,完成“消除”功能。
在函数中建立对象之后,这个对象作为局部对象开始生存,直到函数运行到遇见右括号“}”才结束生存,此时调用析构函数。
对象的释放发生在以下几种情况,首发自学编程网:
·使用运算符new分配的对象被delete删除。
·一个具有块作用域的本地(自动)对象超出其作用域。
·临时对象的生存期结束。
·程序结束运行。
·使用完全限定名显示调用对象的析构函数。
有几条规则约束着析构函数的说明:
·不能接受参量。
· 不能说明有任何返回类型(包括void)。
·不能用return语句返回值。
· 不能说明为const、volatile或static,但析构函数可以因说明为const、volatile或static的对象的析构而被调用。
·可以说明为虚拟的。使用虚析构函数,可以撤消对象而不必知道该对象的类型。由于使用虚拟函数机制,程序将调用该对象的正确的析构函数。
注意:在一个抽象类中,析构函数可以说明为虚函数。我们会在后面详细介绍虚函数的概念。
虚函数去这看吧
>首先,不管是默认析构函数还是自定义析构函数,它永远不应该也不允许被你调用,它是由系统调用的。如果一个类不含有指针类型的数据成员(并且这个指针是在类的构造函数里分配的内存空间)的话,可以无视析构函数。但如果类是下面这种样子的话,就应该自定义析构函数:
class A
{
public:
A() { p = new int[10]; }
~A() { delete [] p; } // 自定义析构函数
private:
int p;
};
这种情况下不重写析构函数,程序也可能正常运行,但它却造成了内存泄露这是程序员的大忌!
当类的实例对象超过了它的生存周期的时候,系统就会调用该类的析构函数来释放内存空间

只能定义一个析构函数,多了的话编译器不知道调用哪个
1、虚析构函数和析构函数在功能上是一回事,因此除了动态联编(此处意思:需要销毁
父类指针指向的子类对象的空间)外,其他性质和析构函数类似。
2、析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);
3、析构函数没有参数,也没有返回值,而且不能重载,因此在一个类中只能有一个析构函数;当撤消对象时,编译系统会自动地调用析构函数。

构造函数是在定义类对象时有程序自动调用的为类提供初始化 *** 作的函数,其函数名和类名相同,无返回值。析构函数则做的事相反工作,主要是对类进行清理 *** 作,当然你也可以在析构函数中做其他你想做的事情。通常析构函数是释放在构造函数中申请的内存。在构造函数前加~就可以构成析构函数,同样没有返回值,值得注意的是,析构函数最后定义为虚析构函数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12850095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存