操作符 Placement New
 
在指定的内存地址构造一个对象的操作符。

语法

result = New(address ) datatype
or
result = New(address ) datatype ( initializers , ... )
or
result = New(address ) datatype [ count ]

参数

address
内存中的位置来构造。括号为可选。
initializers
变量的初始值。
datatype
要构建的数据类型的名称。
count
要构造的元素数。

返回值

新建的数据类型为datatype的指针。

说明

Placement New操作符在指定的内存位置构造指??定的数据类型。

对于简单类型,如整数,可以给出初始值。对于没有Constructors的类型,可以为每个字段指定初始值。具有构造函数的类型也可以通过Placement New调用其构造函数。如果没有给出初始化器,那么这些类型的默认值将被设置。

使用Placement New运算符时,内存赋值为.而是使用指定的address 的内存。
在地址上调用Delete是错误的。正确的方法是调用析构函数(如果存在(隐式地或显式地)),使用成员方法的语法通过使用成员访问运算符。
有关placement new 的使用情况,请参见下面的示例。

指定Any的初始值(如New(address )datatype (Any)New(address )datatype [count ]{Any})不会初始化数据。这对于没有构造函数的数据类型(对于具有构造函数的数据类型,简单指针转换的语法,如Cptr(datatype Ptr, address) )可以替代为无效使用New ... Any)。

例子

''“放置新”的例子

Type Rational
    As Integer    numerator, denominator
    Declare Constructor ( ByVal n As Integer, ByVal d As Integer )
    As String ratio = "/"
End Type

Constructor Rational ( ByVal n As Integer, ByVal d As Integer )
    This.numerator = n
    This.denominator = d
End Constructor

Scope
   
    ''赋值一些内存来构造为Rational
    Dim As Any Ptr ap = CAllocate(Len(Rational))
   
    ''使该位置新建调用
    Dim As Rational Ptr r = New (ap) Rational( 3, 4 )
   
    ''你可以看到,地址是一样的,只是在编译器中有不同的类型
    Print ap, r
   
    ''确认一切都没事
    Print r->numerator & r->ratio & r->denominator
    
    ''删除不得与展示位置一起使用
    ''如果析构函数存在(隐式或明确地),则必须明确地进行破坏
    ''(在这个例子中,var-string成员引发一个隐式的析构函数)
    r->Destructor( )
    
    ''我们明确赋值,所以我们明确地赋值
    Deallocate( ap )
    
End Scope

方言差异

与QB差别

  • 新的FreeBASIC

参考