Skip to content

运算符 Delete 语句


用于销毁数据并释放由 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

vb
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 = 0

end GeSHi

start GeSHi

vb
' 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 = 0

end GeSHi

方言差异

与 QB 的差异

  • FreeBASIC 新增

参见

  • New Expression
  • Delete Overload
  • Deallocate

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系