• 析构函数 p157


    析构函数

    确保对象的各部分被正确的清除,及做一些用户指定的其他清理工作。

    当对象超出它的作用域时,编译器将自动调用析构函数;手动用new在堆上分配的对象空间,需要调用'delete 对象地址'进行手动清除, delete 语句 先调用该对象的析构函数,然后释放内存

     1 #include <iostream>
     2 #include <string>
     3 
     4 using namespace std;
     5 
     6 
     7 class Publisher
     8 {
     9     string name;
    10     string address;
    11     string telephone;
    12 
    13 public:
    14     
    15     Publisher(string name, string address, string telephone) : name(name), address(address), telephone(telephone) 
    16     {
    17         cout << "Publisher(string name, string address, string telephone)" << endl;
    18     }
    19 
    20     ~Publisher()
    21     {
    22         cout << "~Publisher()" << endl;
    23     }
    24 
    25     friend ostream& operator<<(ostream& os, const Publisher& p)
    26     {
    27         return os << "PublisherName: " << p.name << ", PublisherAddress: " << p.address << ", Publishertelephone: " << p.telephone;
    28     }
    29 
    30 };
    31 
    32 
    33 class Book
    34 {
    35     string name;
    36     string author;
    37     double price;
    38     Publisher* publisher;
    39 
    40 public:
    41 
    42     Book(string name, string author, double price, Publisher* pub) : name(name), author(author), price(price), publisher(pub)
    43     {
    44         cout << "Book(string name, string author, double price, Publisher publisher)" << endl;
    45     }
    46 
    47     ~Book()
    48     {
    49         cout << "~Book()" << endl;
    50         if (publisher != 0)
    51         {
    52             delete publisher;
    53             publisher = 0;
    54             cout << "delete publisher" << endl;
    55         }    
    56     
    57     }
    58 
    59     friend ostream& operator<<(ostream& os, const Book& b)
    60     {
    61          os << "-------- print Book ---------------" << endl;
    62          os << "BookName: " << b.name << ", BookAuthor: " << b.author << ", BookPrice: " << b.price << endl;;
    63          os << *b.publisher << endl;;
    64          return os;
    65     }
    66 
    67 };
    68 
    69 int main()
    70 {
    71     
    72     Publisher* pub = new Publisher("人民出版社", "北京市西城区", "021-2134343545");
    73 
    74     Book b1("算法精解", "Kyle Loudon", 56.2, pub);
    75 
    76     cout << b1 << endl;
    77 
    78 };

    运行结果:

  • 相关阅读:
    PHP解决imagecopymerge合成图片后黑色边角的问题
    cmake简单介绍
    python pytest测试框架介绍七 ---测试用例显示用例注释名称
    docker day001
    C语言 字节数组和hex和互相转换
    glsl 内置数学函数
    springboot分析——自定义启动类
    springboot源码分析——自动配置流程
    springboot源码分析——SPI扩展机制
    springboot分析——与其他组件的整合(JPA规范/atomikos/redis)
  • 原文地址:https://www.cnblogs.com/asnjudy/p/4604672.html
Copyright © 2020-2023  润新知