zoukankan      html  css  js  c++  java
  • 109.虚函数与析构构造

     1 #include <iostream>
     2 using namespace std;
     3 
     4 //构造函数不可以是虚函数,如果是虚函数子类对象中的父类拷贝无法初始化
     5 //继承的本质就是子类中间包含父类对象
     6 //析构是从子类析构然后父类析构,如果是多态并且子类中有分配内存,
     7 //父类对象用子类初始化,则需要把析构函数设成virtual
     8 
     9 class myclass
    10 {
    11 public:
    12     char *p;
    13 
    14     virtual void go()
    15     {
    16         cout << "myclass" << endl;
    17     }
    18 
    19     myclass()
    20     {
    21         p = new char[1024 * 1024 * 100];
    22     }
    23 
    24     virtual ~myclass()
    25     {
    26         delete[] p;
    27     }
    28 };
    29 
    30 class classX :public myclass
    31 {
    32 public:
    33     int *p;
    34     classX()
    35     {
    36         p = new int[1024 * 1024 * 100];
    37     }
    38     ~classX()
    39     {
    40         delete[] p;
    41     }
    42 };
    43 
    44 void main()
    45 {
    46     myclass *p = new classX;
    47 
    48     //父类对象用子类初始化,如果析构函数不是virtual则不能调用子类的析构,会造成内存泄漏
    49     //加了virtual则会先调用子类的析构再调用父类的析构
    50     delete p;
    51 
    52     cin.get();
    53 }
  • 相关阅读:
    机器学习到底适合哪些人群?
    Window 下载Android系统源代码
    KeyguardSimPinView
    TrustManagerService.java
    ScrimState.java
    KeyguardSliceView.java
    博客
    name="verify-v1"是做什么用的
    基础练习 特殊回文数
    算法训练 P1103
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8604878.html
Copyright © 2011-2022 走看看