运算符 Delete 语句
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgOpDelete
- 最后更新: 2019-09-13
用于销毁数据并释放由 Operator New Expression 分配的内存的运算符
用法
Delete buf
or
Delete[] buf参数
buf
指向由 New Expression 运算符或 New[] Expression 运算符(New Expression 运算符的数组版本)分配的内存的指针(必须提供与要删除的数据类型相符的类型化指针)。
描述
Delete Statement 运算符用于销毁并释放由 New Expression 运算符创建的对象所占用的内存。删除 TYPE 时,将调用其析构函数。Delete Statement 运算符只应与 New Expression 运算符返回的地址一起使用。
Delete Statement 运算符的数组版本 Delete[] Statement 运算符,用于销毁先前由 New[] Expression 运算符(New Expression 运算符的数组版本)创建的对象数组。此处也会调用析构函数。
Delete Statement 运算符必须与 New Expression 运算符返回的地址配合使用,Delete[] Statement 运算符必须与 New[] Expression 运算符(New Expression 运算符的数组版本)配合使用。不能混用这两种不同版本的运算符。
内存被删除后,buf 指针将指向无效内存。对同一指针值两次调用 Delete Expression 会导致未定义行为。为了防止后续代码意外使用该指针,将 buf 指针设置为 null(0)是个好主意,因为空指针解引用更容易发现和调试。
对空指针调用 Delete Statement 运算符不会产生任何操作。
Delete Statement 运算符提供的内存释放部分可以作为成员运算符 Delete Overload 为用户自定义类型重载。之前用于数据销毁的处理部分永远无法被修改。
注意:任何 Delete[](Statement 或 Overload)运算符以及唯一的 Overload 运算符 Delete 与子类型多态性不兼容,即使使用 Override Virtual Destructor 也可能额外导致崩溃。
不必在派生类型指针上调用此类 Delete([]) Statement 运算符,最安全的方式是简单地(在基类型指针上)调用一个重写的用户 Virtual 成员过程,该过程将自动在派生类型级别启动 Delete([]) Statement 运算符。
示例
start GeSHi
Type Rational
As Integer numerator, denominator
End Type
' Create and initialize a Rational, and store its address.
Dim p As Rational Ptr = New Rational(3, 4)
Print p->numerator & "/" & p->denominator
' Destroy the rational and give its memory back to the system.
Delete p
' Set the pointer to null to guard against future accesses
p = 0end GeSHi
start GeSHi
' Allocate memory for 100 integers, store the address of the first one.
Dim p As Integer Ptr = New Integer[100]
' Assign some values to the integers in the array.
For i As Integer = 0 To 99
p[i] = i
Next
' Free the entire integer array.
Delete[] p
' Set the pointer to null to guard against future accesses
p = 0end GeSHi
方言差异
- 仅在 -lang fb 方言中可用。
与 QB 的差异
- FreeBASIC 新增
参见
New ExpressionDelete OverloadDeallocate
返回 目录