在指定的内存地址构造一个对象的操作符。
语法
result = New(address ) datatype
or
result = New(address ) datatype ( initializers , ... )
or
result = New(address ) datatype [ count ]
参数
address
内存中的位置来构造。括号为不可选。
initializers
变量的初始值。
datatype
要构建的数据类型的名称。
count
要构造的元素数。
返回值
说明
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差别
参考