用于数组的delete p324

delete 对象地址;

delete 首先调用待清除对象的析构函数,然后释放内存

如果delete一个void指针,唯一发生的事情就是释放了内存。因为通过void指针,无法知道对象的类型,就无法调用其析构函数。

delete []books;

[]告诉编译器,books实际上是一个对象数组的起始地址。该代码的任务是,把数组创建时存放在某处的数组元素个数取回,并为数组的所有对象调用析构函数。

 1 #include <iostream>
 2 #include <string>
 3
 4 using namespace std;
 5
 6 class Book
 7 {
 8     string name;
 9     string author;
10     double price;
11
12 public:
13     Book() : name("null"), author("null"), price(0) {}
14     Book(string name, string author, double price) : name(name), author(author), price(price) {}
15
16     //复制构造函数
17     Book(const Book& b) : name(b.name), author(b.author), price(b.price)
18     {
19         cout << "Book::Book(const Book& b)" << endl;
20     }
21
22     ~Book()
23     {
24         cout << "~Book()" << endl;
25         cout << "释放书名为:‘" << name << "‘占用的内存" << endl;
26     }
27
28     friend ostream& operator<<(ostream& os, const Book& b)
29     {
30         return os << "BookName: " << b.name << ", BookAuthor: " << b.author
31             << ", BookPrice: " << b.price;
32     }
33
34     //重载赋值运算符
35     Book& operator=(const Book& b)
36     {
37         cout << "Book::operator=(const Book&)" << endl;
38         name = b.name;
39         author = b.author;
40         price = b.price;
41
42         return *this;
43     }
44 };
45
46
47 int main()
48 {
49     //数组book里放的是Book类型的指针 -- 使用new在堆上创建对象数组
50     //在堆上为‘5个Book对象’分配了内存,并为这5个Book对象调用了构造函数
51     Book* books = new Book[5];
52
53     Book* b1 = new Book("算法精解", "Kyle Loudon", 56.2);
54     Book* b2 = new Book("Qt程序设计", "Pulat", 10.2);
55
56     books[0] = *b1; //
57     books[1] = *b2;
58
59     cout << "---- delete b1 ----" << endl;
60     delete b1;
61     cout << "---- delete b2 ----" << endl;
62     delete b2;
63
64     cout << "---- delete []books ----" << endl;
65     delete []books;
66
67     return 0;
68 };

时间: 2024-10-09 22:59:43

用于数组的delete p324的相关文章

为什么for in循环不适合用于数组

首先一点无关的,使用(var i in a) 而不是( i in a),除非你想创建全局变量. 第二点,for in 循环会忽略空的数组 var a = []; a[5] = 5; // Perfectly legal JavaScript that resizes the array. for (var i=0; i<a.length; i++) { // Iterates over numeric indexes from 0 to 5, as everyone expects. } var

Numpy用于数组的文件输入输出

这一章比较简单,内容也比较少.而且对于文件的读写,还是使用pandas比较好.numpy主要是读写文本数据和二进制数据的. 将数组以二进制的格式保存到硬盘上 主要的函数有numpy.save和numpy.load.默认情况下,数组是以未压缩的二进制保存为.npy的文件. In [1]: import numpy as np In [2]: arr = np.arange(10) In [3]: arr Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) I

VBA 连接文本的自定义函数(可用于数组公式)

Function ConTxt(ParamArray args() As Variant) As VariantDim tmptext As Variant, i As Variant, cellv As VariantDim cell As Rangetmptext = "" For i = 0 To UBound(args)    If Not IsMissing(args(i)) Then        Select Case TypeName(args(i))         

VBA 判断单元格是否为公式,可用于数组

Function ISFORMULA(ByVal rg As Object) As Variant      Dim temp As Variant      Dim i As Integer, j As Integer      temp = rg.Formula            If IsArray(temp) Then         For i = 1 To UBound(temp, 1)            For j = 1 To UBound(temp, 2)       

javascaipt中数组元素删除方法delete和splice

一.用delete 删除数组中元素(少用) 说明:delete: 只是被删除的元素变成了 undefined ,即数组长度不变 //定义数组 var array=["aa","dd","cc","aa"]; //方法1:delete删除数组元素 delete array[1]; //输出结果 : ["aa",undefined,"cc","aa"] getArray(

Delete,Update与LEFT Join

UPDATE:UPDATE A SET ApproverID=NULL FROM [SH_MaterialApplyBuyBill] A LEFT JOIN [SH_MaterialApplyBuyBillDetail] B ON A.ID=B.[MaterialApplyBuyBillID]WHERE A.id=125 AND @InDetailCount=0DELETE:DELETE A FROM [SH_ClosingBalance] A LEFT JOIN [SH_StoreHouse]

你不知道的JavaScript--Item30 数组进阶全掌握

在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 1.创建数组 在JavaScript多种方式创建数组 1.构造函数 1.无参构造函数,创建一空数组 var a1=new Array()

C++ 用于大型程序的工具

<C++ Primer 4th>读书笔记 相对于小的程序员团队所能开发的系统需求而言,大规模编程对程序设计语言的要求更高.大规模应用程序往往具有下列特殊要求: 1. 更严格的正常运转时间以及更健壮的错误检测和错误处理.错误处理经常必须跨越独立开发的多个子系统进行. 2. 能够用各种库(可能包含独立开发的库)构造程序. 3. 能够处理更复杂的应用概念. C++ 中有下列三个特征分别针对这些要求:异常处理.命名空间和多重继承. 异常处理 通过异常我们能够将问题的检测和问题的解决分离,这样程序的问题

18 PHP数字与字符运算 do while ,for 数组 函数 局部通信 时间日期

转义字符 赋值传值/引用传值 [PHP中的数字与字符运算] do while循环 for循环 红白黑球问题 [提高代码质量--红白黑球问题] 赋值传值和引用传址 数组 枚举数组 关联数组 数组的创建 使用array()函数创建数组 重载数组下标 多维数组 数组操作函数 print_r() unset() count() foreach() 数组元素的删除和增加函数 array_shift() array_values() list() 计算机运行时间计算 函数的概念 函数的语法结构 函数结构说明